内核启动全攻略——小白学ARM(九)
- 网络环境搭建
- 下载内核
- 启动内核
- 内存与NAND
网络环境搭建
上一篇博客这块写的有些乱,这里重写:
要启动内核,得先下载内核,内核下载离不开uboot,用uboot自带的tftp网络下载功能,可以将内核下载到板上。
怎么搭建tftp环境呢,
- 用普通网线将mini2440连接到路由器的LAN口,即图上黄色接口。
- 确保你连上的路由器是可以上网的(其实不能上网也没事)
- 笔记本电脑连上该路由器的wifi,这样你的板子和电脑就在同一个网段了。(台式机连上该路由器拉出的网线)
- 确保板子和电脑可以互相ping通:进入uboot命令行模式(不知道怎么进入该模式参考上篇博客),输入
可以查看板子的IP地址,如图,ipaddr就是板子的ip地址,一般默认的ip不正确,需要修改 运行cmd,输入命令print
ipconfig
,查看电脑的ip地址,如图所示,电脑ip地址为192.168.1.100,那么我们就将板子的地址改为192.168.1.120,保证前三段一致,这个“120”是我随便设的,只要不是100就行。
修改方法为:在uboot命令行下输入:
修改好板子IP,再修改服务器ip,修改为电脑的ip
完了之后再保存一下
saveenv
这样修改的内容就保存到nand里了,掉电不丢失,否则只是修改了内存中的环境变量,再上电会发现修改的内容又变回去了。
至此,tftp环境基本搭建完成,可以在uboot命令行中输入,ping电脑的ip
可以看到最后一句:host 192.168.1.100 is alive
说明板子和电脑可以通过网络通信了。
下载内核
这步比较简单,电脑先安装一个小软件:Tftpd64
打开大概是这样的
上面的路径里,存放着你要用TFTP传输的文件,这里我们吧uImage.bin文件放进去,
这个uImage.bin文件就是传说中的内核。
确保这个软件打开,IP地址栏选择本机的ip
进入uboot命令行,确保板子ip和服务器IP都修改正确后
输入:
tftp 0x31000000 uImage
稍等片刻,可以看到uImage正在传输,待传输完成,内核就下载到板子里了。
启动内核
紧接着,在uboot命令行中输入:(注意,地址与上面下载地址“0x31000000”要一致)
可以看到内核自行启动。
至此内核启动完成。
如果启动过程卡在“starting kernel…”
很可能是你下载的内核与板子不匹配,或者内核规定的下载地址并不是“0x31000000”。
内存与NAND
为甚讲这个呢,因为tftp下载到板子的数据,并不是直接存储在nand里,更不是nor flash里,而是存在内存里,是会断电丢失的,这也就能解释为什么下载时需要指定一个“0x31000000”这样的内存地址。
mini2440的nand flash 分区如下图所示,代码部分说明各分区起始地址和分区大小。
目前我们的uboot,即图上bootloader,是存放在nor flash中,方便我们下载其他文件。
内核文件我们下载到内存中,都没有放到flash对应位置,等学会了内核剪裁,uboot编译,驱动编写后,最后成品,也即交给用户的产品是要按下图所示分区存放的,这里只是扩展一下,以防要素过多,搞不清各数据到底存放在哪里。
static struct mtd_partition friendly_arm_default_nand_part[] = {
[0] = {
.name = "supervivi",
.size = 0x00040000,
.offset = 0,
},
[1] = {
.name = "param",
.offset = 0x00040000,
.size = 0x00020000,
},
[2] = {
.name = "Kernel",
.offset = 0x00060000,
.size = 0x00500000,
},
[3] = {
.name = "root",
.offset = 0x00560000,
.size = 1024 * 1024 * 1024, //
},
[4] = {
.name = "nand",
.offset = 0x00000000,
.size = 1024 * 1024 * 1024, //
}
};