您现在的位置: 爱51代码网 >> 范文 >> 文章正文
u-boot如何传入一个自定义参数给内核

u-boot如何传入一个自定义参数给内核

我想在u-boot启动的时候自定义一个参数,然后传给内核,内核解析后,根据参数传入的不同而初始化不同的硬件。这个该怎么设计?

uboot里面有一个命令叫linux_args,是一个字符串描述,uboot启动linux时将linux_args作为参数传给linux, linux把这个启动参数叫cmdline, 在linux启动过程中,相应的模块会捕获这个cmdline里的内容,一旦发现有自身模块的相关描述, 那么就会按照这些描述来实现初始化。

我的uboot里的linux_args里有有描述了flash相关有关的内容:
Dream 5220 # printenv
linux_args=mtdparts=octeon_nor0:1m(BOOT),7m(LINUX),21m(CONFIG),3m(MD)

linux启动后, /mtd/cmdlinepart.c 会捕获到"mtdparts="部分的内容, 之后按照这些描述来初始化flash分区。

在linux启动阶段,start_kernel 也会把这个cmdline 打印出来:
Kernel command line:  bootoctlinux 0x1dd00000 coremask=0x1 mtdparts=octeon_nor0:1m(BOOT),7m(LINUX),21m(CONFIG),3m(MD)  console=t0

你在shell界面下可以查看到这个cmdline的内容:
root@(none):~# cat /proc/cmdline
 bootoctlinux mtdparts=octeon_nor0:1m(BOOT),7m(LINUX),24m(CONFIG) console=ttyS0,115200

你只需要做三件事:
第一, 在uboot界面下使用linux_args命令添加你的描述.
第二, __setup() 函数就是linux的模块里用来捕获cmdline里有关自身描述的。你查一下这个资料。
第三, 实现你的module.

另外, 你也可以将你的描述信息在uboot里面用现成的命令写到eeprom等设备里面,之后你在linux添加一个module去eeprom里面查找相关的信息,同样可以实现根据不同的参数来init 不同的hw。这个办法也是可行的。
 linux_args 是一个uboot的环境变量,用setenv设置的,比如实现上面的设置,就用:
setenv linux_args mtdparts=octeon_nor0:1m(BOOT),7m(LINUX),21m(CONFIG),3m(MD)

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    lotus代理中LS如何将字符串保存到
    在lotus BS系统里怎样方便实现统
    不小心卸载了.net 4 extend,vs2
    C#的session取不到值
    java如何判断一个字符串里的数字
    java怎么实现html转为pdf
    undefined reference timer_crea
    linux文件/usr/lib破坏了,还原后
    Failed to open eth0
    android手机无法与eclipse或电脑
    C/C++洗牌算法源代码
    E-business suite system servic
    uboot大于256K不能正常启动怎
    两个条码枪虚拟成键盘输入如
    获取sim卡信息出现异常-无法
    WinCE各个文件在NandFlash中
    WinCE各个文件在NandFlash中
    WinCE各个文件在NandFlash中
    linux驱动调用device_create
    怎样获取WINCE中所有运行的进
    单片机检测矿泉水瓶是否倒立
    keil中不同源文件中数组的引
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |