嵌入式linux学习计划第一阶段总结

来源:互联网 发布:易烊千玺长相知乎 编辑:程序博客网 时间:2024/05/16 11:10

试验平台: winxp+vmware 6.52+ubuntu 9.04+skyeye 1.2.6


一、交叉编译环境建立
操作系统环境:ubuntu 9.04, gcc-4.1.0, crosstool-0.43
交叉编译环境:gcc-3.4.5, glibc-2.3.6, linux-2.6.12, u-boot-1.2.0
问题:
1、建立交叉编译环境依赖库:build-essential,texinfo,gawk(不能为mawk,在编译glibc时出错),bison,flex,libgmp3-dev,libmpfr-dev,autoconf,libncurses5-dev
2、crosstool似乎停止了更新,高一点的版本不支持。需手工修改patch
见http://blog.chinaunix.net/u2/72383/showart_1076976.html
3、u-boot与交叉编译器版本及软浮点问题
http://fishrei.blog.163.com/blog/static/9274584520088110306553/
http://blog.csdn.net/micro_zhu/archive/2009/02/25/3935809.aspx
但是我在生成交叉编译器后,编译u-boot的时候修改相应CPU目录下的config.mk没出现这个问题。
4、报错:*** buffer overflow detected ***: arm-linux-ar terminated
将ubuntu 9.04自带的gcc-4.3.2替换成gcc-4.1.0。
见http://blog.csdn.net/java211/archive/2009/02/09/3869097.aspx
5、关于gcc-3.4.5-glibc-2.3.6.dat中LINUX_DIR和LINUX_SANITIZED_HEADER_DIR造成的问题
http://www.5itek.com/bbs/Show.asp?id=133&BoardID=20&TB=1

 

二、u-boot移植
环境:arm-linux-gcc-3.4.5, glibc-2.3.6, u-boot 1.2.0
问题:
1、关于u-boot.lds的修改
http://womking.bokee.com/5967668.html
http://bbs.tech.ccidnet.com/read.php?tid=656155
2、针对不同平台必须修改的部分:主要是与时钟频率外设等到。
3、关于Norflash的移除(如果是模拟开发板无nor的情况)
http://blog.163.com/huangwei820410@126/blog/static/24070492200923085151246/
4、skyeye-1.2.8存在问题,u-boot启动不是大量"bus error"就是跑飞后显示大量乱码,改用skyeye-1.2.6(此问题困扰了一个星期,不停去找u-boot的问题)。大致看了一下skyeye的源码,发现指令的动态翻译执行是在一个ARMul_Emulate32的函数中,估计是这个的问题。有时间分析一下为什么skyeye-1.2.8会这样。
5、tftpd的建立:注意如果要使用虚拟网卡,必须以sudo来运行skyeye
见http://blog.mcuol.com/User/weishuangbo/Article/12301_1.htm
6、关于mknandflashdump
源代码有一个bug,另外每重新生成u-boot.bin就要执行一次重新生成nand.dump,否则在运行的时候会停住。
http://www.linuxfans.org/bbs/thread-184643-1-5.html
7、错误:NAND read: device 0 offset 0, size 131072 ... warning when RE  falling,do nothing 0 bytes read: ERROR
解决:http://blog.csdn.net/zblue78/archive/2008/02/26/2121871.aspx

 

三、内核移植
参考文档:S3C2410的Linux UBOOT全线移植文档.pdf、移植2.6.22.2到博创2410-S开发板.pdf
环境:arm-linux-gcc-3.4.5, glibc-2.3.6, linux-2.6.12
1、错误:arch/arm/mm/alignment.c:116: error: read-only variable '__r2' used as 'asm' output
解决:交叉编译环境由4.1.0换成低一点的版本编译3.4.5
2、通过tftp加载zImage运行bootm,报Bad Magic Number错误。必须转换成uImage才行。
zImage要用u-boot的go命令执行(实际是会报错的);用u-boot的mkimage生成的uImage用bootm执行。
zImage是压缩的,uImage是非压缩的,uImage前面有0x40个字节的头。
3、错误:Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
原因:没有实现根文件系统
4、根据网上关于移植2.6.22到博创2410开发板的文章来看,nandflash分区信息不需要添加到devs.c,因为在common-smdk.c中已经有分区信息。不知道从哪一版本开始是这样。

 

四、cramfs移植
1、采用“S3C2410的Linux UBOOT全线移植文档”会报错:Kernel panic - not syncing: No init found.  Try passing init= option to kernel。估计是执行不对。
2、采用http://www.diybl.com/course/6_system/linux/Linuxjs/2008826/137708.html成功

 

下一阶段准备学习一下MiniGUI或者QT/E,至于对于内核和驱动的开发还是遵循由浅至深的过程比较稳妥,这样才会保持学习的兴趣和积极性。至于移植到开发板上,因为已经实现从SD卡启动所以不需要对EBOOT做太多修改,只要保证硬件相关的修改正确性就好了,不过这估计是一个月后的事了,