uboot启动参数设置和内核引导方法总结

uboot启动参数设置和内核引导方法总结
1. 从flash启动内核 ,挂载NFS网络文件系统
环境搭建:
setenv bootcmd bootm 0x2060000
setenv ipaddr 10.108.23.111
setenv ethaddr 00:0E:99:EF:EF:22
setenv serverip 10.108.23.115
setenv nfshost 10.108.23.115
setenv rootpath /home/filesys


setenv bootargs console=ttyS0,115200n8 video=dm64xxfb:interface=composite:mode=ntsc:output=pal noinitrd rw eth=eth0 ip=10.108.23.111::10.108.23.115 root=/dev/nfs nfsroot=10.108.23.115:/home/filesys,nolock mem=120M


应用uboot1.3.4, 最后设置的启动参数,可以实现OSD功能:20120307
setenv bootargs mem=116M console=ttyS0,115200n8 root=/dev/nfs rw nfsroot=10.108.23.115:/home/filesys,nolock ip=dhcp video=davincifb:vid0=0,2500K:vid1=0,2500K:osd0=720x576x16,2025K  davinci_enc_mngr.ch0_output=COMPOSITE davinci_enc_mngr.ch0_mode=ntsc




saveenv
EVM板关电重起;


烧写内核:


把uImage考入到/tftpboot目录
tftp 0x80800000 uImage
在uboot下:erase 0x2060000 +200000
cp.b 0x80800000 0x2060000 200000


完毕
2. TFTP引导内核启动,挂载NFS网络文件系统
法一:
从上面改几个环境变量参数即可:
setenv bootcmd ‘dhcp;bootm’
setenv bootfile uImage
saveenv
重启
PS:此法实现内核自启动
法二:
进入uboot下载模式,输入命令:
tftp 0x80800000 uImage //把uImage内核文件加载到内存0x80800000地址处
bootm 0x80800000 //从内存0x80800000地址处启动内核






以下是法一:启动打印信息




*****************************************************
              *Laboratary of ITS, BIT* 
*****************************************************
Hit any key to stop autoboot:  0 
BOOTP broadcast 1
DHCP client bound to address 10.108.22.148
TFTP from server 10.108.23.115; our IP address is 10.108.22.148
Filename 'uImage'.
Load address: 0x80700000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         ############################################################
done
Bytes transferred = 1638048 (18fea0 hex)
## Booting image at 80700000 ...
   Image Name:   Linux-2.6.18_pro500-davinci_evm-
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1637984 Bytes =  1.6 MB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
OK


Starting kernel ...
### U-Boot 中与引导内核启动相关的 Flags 配置 #### 启动标志位的作用 在U-Boot环境中,`flags`变量用于控制系统的各种行为模式。对于引导内核而言,特定的flag能够影响加载方式以及后续操作流程。例如,在某些情况下可能需要指定是否启用压缩解压功能或是调整内存映射关系等。 #### 常见的 Boot Flag 及其意义 1. **BOOTM_STATE_OS_BOOT** 表明当前处于准备进入操作系统执行状态的关键时刻。此时U-Boot已完成必要的初始化工作并将控制权交给Linux Kernel之前的一瞬间[^1]。 2. **BOOTM_STATE_LOAD_os** 此标记表示正在将目标OS(通常是Linux kernel image)载入RAM中以便稍后执行。这一步骤至关重要因为它决定了最终能否成功运行所选的操作系统实例。 3. **BOOTM_STATE_FIND其他组件** 这一阶段涉及到查找并解析附加于kernel之后的数据结构如device tree blob (DTB),这对于现代ARM架构尤为关键因为它们依赖于此来获取硬件配置详情。 4. **FLAG_ENV_IS_IN_FLASH 或者 FLAG_ENV_IS_NOWHERE** 定义环境变量存储位置是在闪存还是根本不保存任何环境设置。前者允许持久化更改而后者则每次重启都会恢复默认值[^2]。 5. **CONFIG_CMDLINE_TAG** 如果定义了此宏,则意味着支持向Kernel传递命令行参数的功能。具体来说就是在启动过程中会构建一个tag表项放置于预定地址供新进程读取使用[^3]。 6. **CONFIG_SETUP_MEMORY_TAGS** 设置memory tags使能与否直接影响到如何告知内核可用物理内存范围的信息传递机制。开启此项有助于简化早期开发调试期间对资源分配的理解管理。 7. **MTDPARTS_DEFAULT** 虽然严格意义上不属于boot flag范畴,但作为分区布局描述符它同样参与到了整个启动链条当中。上述例子展示了怎样划分NAND flash空间以容纳不同的固件模块服务程序[^4]。 ```c // 示例:检查并处理 BOOTM_STATE_OS_BOOT 标志 if ((state & BOOTM_STATE_OS_BOOT) == BOOTM_STATE_OS_BOOT) { printf("Preparing to hand over control to the OS...\n"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值