1_Linux启动方式比较
一上电 | |
Pc | Linux/嵌入式系统 |
Bios硬盘读入内核 | Boot loader(最终目的是启动内核,有很多种,我用的是uboot)从flash读出内核,放到sdram中 |
引导操作系统Windows | 引导内核 |
识别c,d盘 | 挂接根文件系统 |
运行应用程序QQ等 | 应用程序 |
2_uboot,打补丁 编译 烧写
先看uboot源码包: u-boot-1.1.6.tar.bz2, 在看补丁u-boot-1.1.6_jz2440.patch (将我们在源码包上做的修改独列出来作为一个补丁,小一点).将这俩个文件放到服务器上面,分为四步:
a)_解压
b)_打补丁
进入到解压后的uboot-1.1.6目录下打补丁,配置选项 –p1的意思是忽略当前目录的意思.补丁文件中 “--”意思是原来的源文件, “++”是修改后的文件,由于已经进入源码文件,于是忽略第一个 “/”前面的东西
c)_配置
uboot的实现是很依赖具体硬件的,不同的嵌入式系统中的硬件也是千差万别,于是需要进行一定的配置,先配置成我们需要的类型,对于我使用的这块单板,只需要输入
make 100ask24x0_config
d)_编译
make
编译的时间有点长,需要等待一段时间,然后拿到pc上用oflash烧写到nandflash 即可
3_uboot操作
CPU上电后会从某一个地址开始执行,arm架构的CPU会从地址0x0000 0000 开始执行,需要将存储器件rom或者flash映射到这个地址,uboot就存放在这个地址处,一上电就可以执行.
于是板子上电,在倒计时结束前(启动加载模式)按下空格,进入菜单界面(下载模式)
这些选项可以烧写文件系统,内核到开发板上,q 退出菜单,输入 ? 或者 help就可以看到常用的选项了,如果需要查看该选项的详细用法,可以在该选项之前加入 “? xx”即可:
Print可以输出环境变量,比如ip地址,倒计时时间,等待, 也可以 “set xxx”进行设置,比如开始倒计时的时间可以设置,
3_uboot结构
如果可以将操作系统内核复制到内存中运行,无论从本地比如flash还是从远端比如通过网络,就称这段程序为boot loader.Uboot的最终目的是启动内核,需要从flash中读出内核,放到SDRAM中,然后启动内核,于是uboot需要实现以下几个基本功能:
1_读flash:需要读出内核
1.1_写flash,为了开发方便,通过网卡, USB, 串口等等可以写入命令等
2_初始化sdram
2.1_初始化时钟,刚开始上电2440的时钟的晶振12M,但是最大可以支持400M,关看门狗
2.2_初始化串口
3_启动内核
4_uboot启动方式
具体详细的功能分析需要参考makefile