想在skyeye里增加传递linux启动参数
想在skyeye里增加传递linux启动参数目前不太清楚linux参数存放机制
是不是都存放在物理内存0x100处
搜了一下找到2。4的
Linux内核参数传递Tag
在2.4(具体哪个版本记不清了)以后的Linux内核中引入了一种新的向内核传递参数的方法tag标记。内核参数通过一个静态的tag链表在启动的时候传递到内核。每个tag的结构为
+-----------+
tag_header
+-----------+
tag_xxx
+-----------+
其中tag_header为tag头,表明tag_xxx的类型和大小,之所以要标识tag_xxx的类型是因为不同的tag需要不同的处理函数(下文讲tagtable的时候会分析到)。tag_header的结构为
struct tag_header
{
int size;
int tag;
}
size表示tag的结构大小,tag为表示tag类型的常量。这个静态的链表必须以tag_header.tag = ATAG_CORE开始,并以tag_header.tag = ATAG_NONE结束。由于不同的tag所使用的格式可能不尽相同,所以内核又定义了一个结构tagtable来把tag和相应的操作函数关联起来
========================
是不是不是字符串形式是按照上面的结构体形式存的
skyeye是不是在初始化内存槽的时候放进去就行了 恩,可以,事实上我们在powerpc模拟和MIPS模拟上运行linux,也都需要给linux传递参数,这样我们可以不需要 bootloader来直接运行linux。可以参考代码arch/ppc/common/ppc_boot.c
传递参数应该是根据不同的Linux BSP不一样,这个需要看linux的相关代码,虽然很多都是放在偏移0x100的地方。比较好的办法是在skyeye.conf添加一个选项,允许在某个内存地址放一段字符串,这样的话,可以不重新编译skyeye,就可以灵活的通过skyeye.conf给linux传递不同的参数。
可以考虑在每一个machine初始化的时候,类似于xxx_mach_init的时候做这件事情,因为毕竟每一个mach要传递的参数都不一样 恩我正是这么想的 看看linux的代码在来搞吧 看奥运先了 初步试验了一下应该可以实现
9200和2410都是在100偏移处开始存放tags,只要在内存位置放相应内容就可以了
版主看看怎么实现好还用bank_ptr找到内存槽地址然后放吗
明天把代码放上来
基本上可以了把patch放上来 是1。2。6的
基于svn上-1.2.6版本的patch一共3个
[ 本帖最后由 duzhig 于 2008-8-15 21:26 编辑 ] cpu:arm920t
mach: at91rm92
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
mem_bank: map=M, type=R, addr=0x00100000, size=0x00010000
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00200000
mem_bank: map=M, type=RW, addr=0xc0200000, size=0x00500000, file=./initrd.img
mem_bank: map=M, type=RW, addr=0xc0700000, size=0x01900000
mem_bank: map=I, type=RW, addr=0xfffa0000, size=0x00060000
bootcmd:"cmdline=console=ttyS0,115200 initrd=0xc0200000,0x00300000 ramdisk_size=8192 rw mem=32M root=/dev/ram0",baseaddr =0xc0000100
页:
[1]