u-boot移植总结(二)

来源:互联网 发布:美国留学生区别知乎 编辑:程序博客网 时间:2024/04/27 15:25

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

 

 

原创粉丝点击