QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2115|回复: 5

想在skyeye里增加传递linux启动参数

[复制链接]
发表于 2008-8-7 21:34:13 | 显示全部楼层 |阅读模式
想在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是不是在初始化内存槽的时候放进去就行了
发表于 2008-8-8 13:46:22 | 显示全部楼层
恩,可以,事实上我们在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要传递的参数都不一样
回复

使用道具 举报

 楼主| 发表于 2008-8-8 18:14:39 | 显示全部楼层
恩我正是这么想的 看看linux的代码在来搞吧 看奥运先了
回复

使用道具 举报

 楼主| 发表于 2008-8-11 20:39:19 | 显示全部楼层
初步试验了一下应该可以实现
9200和2410都是在100偏移处开始存放tags,只要在内存位置放相应内容就可以了
版主看看怎么实现好还用bank_ptr找到内存槽地址然后放吗
明天把代码放上来
回复

使用道具 举报

 楼主| 发表于 2008-8-14 20:38:44 | 显示全部楼层

基本上可以了把patch放上来 是1。2。6的

基于svn上-1.2.6版本的patch
一共3个

[ 本帖最后由 duzhig 于 2008-8-15 21:26 编辑 ]

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2008-8-14 20:50:59 | 显示全部楼层
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
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-22 20:28 , Processed in 0.044614 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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