QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1384|回复: 8

uclinux的移植时相关参数的修改设定

[复制链接]
发表于 2005-2-16 11:03:13 | 显示全部楼层 |阅读模式
在启动kernel了以后,kernel怎么确定romfs在memory的位置来挂载?在用skyeye启动uclinux时可以看见Kernel command line: root=/dev/rom0,请问这个rom0设备是装的romfs吗?如果是那么怎么在编译内核的时候确定这个参数的,还有rom0的位置?
如果用bootloader是可以传送一些系统参数给kernel,包括romfs的位置?那么在kernel中怎么设置这些参数放在memory中的具体位置?
刚刚接触uclinux,对linux的东西了解很少,希望哪位兄台解惑,最好能具体点  。谢谢
发表于 2005-2-19 19:26:12 | 显示全部楼层
rom只是设备名,一般来说都要把romfs的地址发给kernel,但是现在大多数人都是在/driver/block/blkmem.c中把romfs.o加上,然后让uclinux自动找到。
回复

使用道具 举报

发表于 2005-2-20 09:31:11 | 显示全部楼层
太好了

我想再问一下,如果我不想用ROMFS,我想直接把整个文件系统弄成一个RAMDISK镜像
,这样的话我如何把RAMDISK这个镜像指给UCLINUX呢?
回复

使用道具 举报

 楼主| 发表于 2005-2-21 11:51:16 | 显示全部楼层

继续请教

想用syeye来模拟at91的那个板子。按照板子的手册设定flash基址为0x010000,size 0x00200000,sram基址为0x02000000,size为0x00200000.
这几天看了些帖子,说romfs地址在bklmem.c里面可以设定。比如这个root=dev/rom0,这个rom0应该是在加载文件系统时确定的大小吧,而不是在memory初始化确定的。
根据别人的例子在blkmeme_init()中加入
arena[0].length = (unsigned long)(-1);
arena[0].address = (unsigned long)0x02000000;
接着下面有一个条件是若arenalength==-1,那么在arena.address+8找arena的length。
但是编译过后运行kernel找不到romfs的地方,感觉romfs并没有放在该地址(附图romfs);

这个arena数组元素的多少在kernel初始化是怎么确定的呢?
我想这个aren0就是rom0吧,是有多少个设备就是i多大吗?

又想在blkmem.c里面有
#if defined(CONFIG_ARCH_DSC21) || defined(CONFIG_ARCH_ATMEL)
#define FIXED_ROMARRAY (char *)(FLASH_MEM_BASE)
#endif
把#define FIXED_ROMARRAY (char *)(FLASH_MEM_BASE)
改为{0,0x02000000,-1},也出错编译编译不了。
这个ROMARRAY是什么意思,这里把设定为FLASH_MEM_BASE是什么意义?

还有就是我在特定架构arh.c里面加入MACHINE_START里面加入BOOT_PARAMS(0x01000100),意思是bootloader放的参数在这个地方,但是一编译就出错。也不知道对不对?

以上就是菜鸟遇到的问题,因为没有开发板,只是想了学一下uclinux怎么在ARM上跑起来的,再加上用的是vmware,很艰难啊。希望哪位能解惑啊?感激不尽

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2005-2-22 12:50:43 | 显示全部楼层
已经编译通过了,但是所有的参数都是在dist包里面设定的,下一步想用bootloader来传送参数,不知道有什么较简单的bootloader用来学习?
回复

使用道具 举报

 楼主| 发表于 2005-2-23 09:51:58 | 显示全部楼层
请问001ye,按照你说的那种方法是kernel已经和文件系统在一块了,就不能分开烧写了???
回复

使用道具 举报

发表于 2005-2-24 10:46:56 | 显示全部楼层
能的!但是把romfs和kernel分开的话,中间就会有空隙。个人认为,不太花算。还有如果分开的话,kernel和romfs就要下载两躺。比较麻烦。如果,要分开的话,好象是用initrd = 0x????????这个命令。我不太记得了,就是斑竹发的uclinux-2.6.x那一个贴子上的哪个命令。只要,命令的地址和下载的地址相同就可以了!还有aloonling同志,你那样的话,可能也是不能跑的,还要在/arch/armnommu/vmlinux-armv这个连接文件中加如
romfs_data = .;
romfs.o
romfs_data_end = .;
把romfs.o和kernel一起编译。当然这是我在44b0上的经验,可能和你的at91不太一样。
回复

使用道具 举报

 楼主| 发表于 2005-2-24 12:18:42 | 显示全部楼层
001ye,我说编译通过的意思就是可以跑了,而且可以把romfs放在任意合理的位置:)(当然是在skyeye上面,也可以加入hello world和skyeye的虚拟net模块)。

你的意思是必须在连接文件加入romfs?我觉得这里的romfs完全可以不和kernel一起编译啊,即使加入了你说的那几行,我想romfs的位置还是的指定。因为romfs本身并没有和kernel有联系啊。不过我没有用过initrd命令,不太清楚。


另外谢谢你的解答 :-)
回复

使用道具 举报

发表于 2005-2-24 19:43:52 | 显示全部楼层
其实,实际上romfs的确不和kernel一起编译。个人感觉在连接文件上加入以上的语句目的是让kernel能找到romfs的地址。其实作用就是initrd的作用,但是方法上省了好多步。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-26 02:21 , Processed in 0.040711 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表