u-boot移植课程结束,放假两天,感觉这一周学习下来很混乱,整理了一下u-boot的相关知识。
U-BOOT源码下载:ftp://ftp.denx.de/pub/u-boot/
一、bootloader流程
stage1:
1)硬件初始化(在这里我想到stage2也要初始化硬件,他们到底有什么区别?);这一步是初始化CPU内部寄存器、内存控制器
2)为加载bootloader的stage2准备RAM空间 ;
3)拷贝bootloader的stage2到RAM空间 ;
4)设置好堆栈(在启动bootloader的时候先执行一段汇编程序,然后跳到C语言部分,而C的变量……是需要堆栈的) ;
5)跳转到stage2的C入口点;
从第二三步可以看出这阶段是在flash中运行的
stage2:
1)初始化硬件设备;而这一步是初始化板载设备,如串口、网卡之内的
2)将内核映像和根文件系统从flash上读到RAM中;
从第二步可以看出这阶段是在内存中运行
二、u-boot
编译u-boot.bin生成
1、对于board进行配置
#make smdk2410-config 它到底是做上面工作的?告诉我们选择的是哪一个开发板;而smdk2410-config到底又是哪里的东西?Makefile里面的“目标”
2、进行编译生成u-boot.bin文件
#make CROSS COMPILE = arm-linux-/...(后面跟工具链路径)
三、u-boot命令
1)环境变量
printenv查看环境变量
setenv添加、修改、删除环境变量
saveenv保存环境变量
2)文件下载
tftp下载:
先设置好网络
#setenv ethaddr 12:34:56:78:9A:BC(网卡mac)
#setenv ipaddr 192.168.8.*(开发板ip)
#setenv serverip 192.168.8.*(tftp服务器ip,当然前提是保证tftp服务器在工作)
然后就可以下载了
#fttp 0x32000000 uImage(把server中服务目录下的 uImage通过TFTP读入到0x32000000处)
四、执行程序
go addr[arg……]执行内存中二进制代码,一个简单的跳转指令地址(zImage)点击打开链接
bootm[addr[addr]……]执行内存中二进制代码,要求二进制代码有固定格式的文件头(uImage)
#bootm 0x30000000 执行以0x30000000开始的内核镜像文件
开发板信息
#bdinfo
设置自动启动:主要是对bootdelay(也就是在这么长时间内不干预自动启动项)和bootcmd(在bootdelay这么长时间内自动做的事)的设置,通过printenv可以看到他们的状态
#setenv bootcmd tftp 0x30000000 uImage \;bootm 0x30000000
#saveenv