2024年3月26日发(作者:)
uboot传递内核参数全解析
一:启动参数的传递过程
启动参数是包装在数据结构里的,在linux kernel启动的时候,bootloader把这个数据
结构拷贝到某个地址,
在改动PC跳向内核接口的同时,通过通用寄存器R2来传递这个地址的值,下面这句话
就是uboot跳向linux
kernel的代码(bootm命令)
theKernel (0, bd->bi_arch_number, bd->bi_boot_params);
thekernel其实不是个函数,而是指向内核入口地址的指针,把它强行转化为带三个参数
的函数指针,会把三个
参数保存到通用寄存器中,实现了向kernel传递信息的功能,在这个例子里,会把R0赋
值为0,R1赋值为机器号
R2赋值为启动参数数据结构的首地址
因此,要向内核传递参数很简单,只要把启动参数封装在linux预定好的数据结构里,拷
贝到某个地址(一般
约定俗成是内存首地址+100dex)
二:启动参数的数据结构
启动参数可保存在两种数据结构中,param_struct和tag,前者是2.4内核用的,后者是
2.6以后的内核更期望用的
但是,到目前为止,2.6的内核也可以兼容前一种结构,两种数据结构具体定义如下(arm
cpu):
struct param_struct {
union {
struct {
unsigned long page_size; /* 0 */
unsigned long nr_pages; /* 4 */
unsigned long ramdisk_size; /* 8 */
unsigned long flags; /* 12 */
#define FLAG_READONLY 1
#define FLAG_RDLOAD 4


发布评论