浅谈浅谈ARM下下U-boot给给Kernel传参数传参数
本文章介绍ARM下U-boot给Kernel传参数。
我们可能都知道:U-boot会给Linux Kernel传递很多参数,如:串口波特率,RAM Size,videofb、MAC Address等,而且
Linux kernel也会读取和处理这些参数。
两者之间通过struct tag来传递参数。U-boot把要传递给kernel的东西保存在struct tag数据结构中,启动kernel时,把这个结构
体的物理地址传给kernel;
Linux kernel通过这个地址,用parse_tags分析出传递过来的参数。
大家也知道在ARM架构上,u-boot向Linux内核传递参数利用了R0,R1和R2三个寄存器,并采用如下约定:
R0
暂时不用,缺省放0
R1
机器号,标识计算机系统的型号,
内核支持的所有使用ARM处理器的设备ID号定义在arch/arm/tools/mach-types文件中,
编译内核过程中会被转换为一个头文件include/asm-arm/mach-types.h供其他文件包含使用。
R2
R2寄存器传递的是一个地址,也就是指针的概念,这个指针指向一个TAG区域.
UBOOT和Linux内核之间正是通过这个扩展了的TAG区域来进行复杂参数的传递,
如 command line,文件系统信息等等,用户也可以扩展这个TAG来进行更多参数的传递。
下面就一下AM335X SDK6.0的Code进行分析:
我们先了解这些参数是如何组织、如何传
先看U-boot阶段的存储的划分
要传递的参数上图中的SDRAM区域的什么位置?从上面的名字可以知道可定是GD区域,当然是怎么放,如何组织该这些数
据,肯定要有一个相应的struct来保存,
这就是GD struct GD struct的主要成员如下:
在U-Boot的include/asm-arm/global_data.h
评论0
最新资源