S5PV210学习笔记——内核移植与文件系统构建
由于之前做过2440和6410,鉴于时间原因,这里暂时跨过其他模块的裸机驱动和uboot移植,直接进入内核移植及驱动开发方面的学习。
内核移植其实很简单,因为内核是linus率领的linux内核开发团队开发并维护的,我们只需要跟我们的平台交叉编译一下即可使用,但是,内核移植也不简单,因为内核移植起见出现任何问题都可能会被卡住,因为内核代码非常庞大,我们无法通读内核代码,下面是我移植期间遇到的各种悲催的问题和解决方案,首先是必备的开发环境:
a) Linux内核代码,版本3.8.3
b) S5PV210开发板(我的是TQ210)
c) HOST环境是WIN7(64位)下安装的Ubuntu虚拟机(12.10)
一 内核编译
从Linux内核网站(kernel.org)下载内核代码、解压并进入内核目录
(1)修改Makefile,将195行和196行改为:
根据S5PV210的内存映射表可以看出,SROMC的BANK1地址空间为0x88000000~0x8FFFFFFF,故当CPU寻址该范围内的地址空间时才会使能片选nCS1。所以,我们采用的是0x88000000地址。
另外,从TQ210原理图的DM9000部分还可以看到,DM9000使用的是外部中断10,故将中断号修改为10号。
最后需要说明的是smdkv210_dm9000_init函数的修改,这是因为DM9000的数据访问、命令发送等是按照一定时序工作的,而DM9000接再SROMC上,因此需要配置SROMC时序,使其可以正确驱动DM9000,关于时序的详细配置我还没研究,不过韦东山老师的第二期视频中讲述了DM9000的驱动移植,也讲了时序配置,需要的话可以参考。
五 挂接文件系统
我们现在配置好了网卡驱动,还需要对内核稍作配置才能使内核支持网络文件系统挂载,具体的可以参考以下配置。
(1) 配置网络支持
但是上述警告不影响使用。反之,如果设置为no_subtree_check,虽然系统可以正常挂载,但是无法进行创建文件等写操作,也就是说,挂载的文件系统是只读的。最后还要修改下/nfsroot的权限,为了以后使用方便。
chmod a+x /nfsroot -R
到这里,基于TQ210的内核移植已经初步完成了,接下来我们就可以进行驱动开发了。六 问题总结
我在配置过程中遇到了很多问题,现在稍作总结
(1) 串口中断打印完Starting kernel...之后就没有任何输出了
配置内核,指定调试信息输出端口为UART0,文中讲到了详细配置。
(2) 解压完内核之后没有任何输出了
a.检查bootargs环境变量设置是否正确,必须设置console=ttySAC0
b.检查uboot传递的机器码根内核是否对应
c.检查uboot传给内核的taglist是否正确
(3) 内核无法挂接到NFS文件系统
a. 正确移植DM9000网卡驱动
b. 配置内核的网络部分、网卡设备和文件系统中的网络文件系统
c. 确认NFS服务器的配置是否正确,用另外其他linux或已经移植好系统的linux进行测试(mount -o nolock xx.xx.xx.xx:/nfsroot/rootfs)。
(4) 文件系统挂接成功,无法执行/linuxrc
a. 检查NFS配置文件,最好以NFSv2方式配置,内核不支持的话会出现问题。
b. 最好以文中推荐的方式进行NFS服务器配置。
c. 配置完成之后需要重启NFS服务或者是重启系统。
七 其它问题
如果您在移植过程中出现了其他问题欢迎留言讨论。
