内核移植之初步设置单板

uboot的移植先告一段落,从这节开始进入内核的移植,,移植的内核的版本为Linux3.4.2,编译器的版本为arm-linux-gcc 4.3.2
把linux内核的压缩包传到服务器上,解压,进入内核目录,首先要做的事就是编辑顶层的Makefile,要使用我们的编译环境
在这里插入图片描述
在编译内核的时候要使用配置文件,路径是**/arch/arm/configs/,进入这个目录去查看和我们相关的配置文件,
在这里插入图片描述
相比mini2440来说,s3c2410的配置和s3c2440更接近一些,所以使用s3c2410的配置
make s3c2410_defconfig -> 生成了.config
make uImage

cp uImage /work/nfs_root/
在uboot上使用nfs挂在内核
nfs 32000000 192.168.1.101:/work/nfs_root/uImage
bootm 32000000

启动之后,出现问题,内核启动挂死
在这里插入图片描述
1、检查机器id
在分析uboot的启动流程之后知道,uboot在做完必要的初始化之后,开始引导内核,并将单板的机器id传递给内核,如果id不能被内核识别,那么内核启动就会停止,现在的情况,我们先来检查一下机器id是否正确,从启动内核开始检查
common/cmd_bootm.c,找到do_bootm函数
在这里插入图片描述
由于这个函数体比较大,这里就不展示多余的内容了,找到相关的地方
在这里插入图片描述
这个数组包含了许多的启动函数,根据不同的架构
在这里插入图片描述
第一项就是linux的启动函数
do_bootm_linux**,跟踪这个函数,在arch/arm/lib/bootm.c
在这里插入图片描述
在这里插入图片描述
这里就是最终启动内核的地方,kernel_entry函数的第一个参数是0,第二个参数是机器id,第三个参数是uboot的参数列表,在函数的最开始,机器id被赋值为unsigned long machid = gd->bd->bi_arch_number;,然后在环境参数中查找s = getenv(“machid”);,如果环境参数中有机器id的话就使用环境参数中的机器id,没有的话就使用默认的,我们现在是没有的,所以使用默认的id.
搜索看默认的机器id在哪里被赋值,首先在arch/arm/lib/board.c的board_init_f函数中定位到在这里插入图片描述
但是这个宏在我们的配置文件中没有被定义,所以这里是不会执行的,再去搜索,定位到的第二处是在board/samsung/smdk2440/smdk2410.c (这里名字在移植的时候没有改过来,其实是2440的文件,不要被误导)
在这里插入图片描述
在这里插入图片描述
终于找到了,uboot传给内核的机器id是193,内核目录的arch/arm/目录下放的是内核支持的单板的文件
在这里插入图片描述
进入该目录下的mach-s3c24xx/,发现,对于24xx的单板,内核也支持很多,那么实际选择哪一个是根据机器id来选择的
在这里插入图片描述
如果机器id不对的话,识别不到就会出错,来做个实验,在uboot里随便写个机器id
set machid 1234
nfs 32000000 192.168.1.101:/work/nfs_root/uImage
bootm 32000000

在这里插入图片描述
内核打印出错误,并列举它支持的机器id,那么就根据上面的内容设置16a(smdk2440),重复上面的工作,下载内核·启动,如下
在这里插入图片描述
发现是不能启动的,再来设置为set machid 7CF(mini2440),启动还是出现问题,还存在乱码的错误,引出一个小问题,在uboot里没有设置波特率,设置如下
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
设置完成之后,Mini2440的机器id可以启动,如下
在这里插入图片描述
那就说明不是机器id引起的问题,那就根据实际的单板排查一下问题,
s3c2440的机器id对应的配置文件是arch/arm/mach-s3c24xx/mach-smdk2440.c,文件的最后有一个结构体,
在这里插入图片描述
内核会根据uboot传递的id进行匹配,根据每一个id找到对应单板的初始化结构体,这个结构体里放的就是单板的一些初始化函数
在这里插入图片描述
其中,函数s3c24xx_init_clocks是设置2440的晶振的,在裸机学习的时候,我们知道2440的晶振是12MHz,那么这里的设置是不对的,改为12M
在这里插入图片描述
重新编译,记得在uboot里把机器id设置为s3c2440的机器id16a,saveenv
执行前面的tftp下载内核,启动,如下
在这里插入图片描述
启动成功,虽然还是打印出了错误,但是第一步就已经成功,内核已经支持2440的启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值