内核启动全攻略——小白学ARM(九)

内核启动全攻略——小白学ARM(九)

网络环境搭建

上一篇博客这块写的有些乱,这里重写:

要启动内核,得先下载内核,内核下载离不开uboot,用uboot自带的tftp网络下载功能,可以将内核下载到板上。

怎么搭建tftp环境呢,

  1. 用普通网线将mini2440连接到路由器的LAN口,即图上黄色接口。
  2. 确保你连上的路由器是可以上网的(其实不能上网也没事)
  3. 笔记本电脑连上该路由器的wifi,这样你的板子和电脑就在同一个网段了。(台式机连上该路由器拉出的网线)
    在这里插入图片描述
  4. 确保板子和电脑可以互相ping通:进入uboot命令行模式(不知道怎么进入该模式参考上篇博客),输入print可以查看板子的IP地址,如图,ipaddr就是板子的ip地址,一般默认的ip不正确,需要修改
    在这里插入图片描述
    运行cmd,输入命令ipconfig,查看电脑的ip地址,如图所示,电脑ip地址为192.168.1.100,那么我们就将板子的地址改为192.168.1.120,保证前三段一致,这个“120”是我随便设的,只要不是100就行。
    修改方法为:在uboot命令行下输入:
setenv ipaddr 192.168.1.120

修改好板子IP,再修改服务器ip,修改为电脑的ip

setenv serverip 192.168.1.100

完了之后再保存一下

saveenv

这样修改的内容就保存到nand里了,掉电不丢失,否则只是修改了内存中的环境变量,再上电会发现修改的内容又变回去了。

在这里插入图片描述
在这里插入图片描述
至此,tftp环境基本搭建完成,可以在uboot命令行中输入,ping电脑的ip

ping 192.168.1.100

在这里插入图片描述
可以看到最后一句:host 192.168.1.100 is alive
说明板子和电脑可以通过网络通信了。

下载内核

这步比较简单,电脑先安装一个小软件:Tftpd64
打开大概是这样的
在这里插入图片描述
上面的路径里,存放着你要用TFTP传输的文件,这里我们吧uImage.bin文件放进去,
这个uImage.bin文件就是传说中的内核。
确保这个软件打开,IP地址栏选择本机的ip
进入uboot命令行,确保板子ip和服务器IP都修改正确后
输入:

tftp 0x31000000 uImage

稍等片刻,可以看到uImage正在传输,待传输完成,内核就下载到板子里了。

启动内核

紧接着,在uboot命令行中输入:(注意,地址与上面下载地址“0x31000000”要一致)

bootm 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, //
         }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值