设为首页 加入收藏

TOP

基于3c2410的Linux2.6.22移植
2014-11-24 00:39:12 来源: 作者: 【 】 浏览:8
Tags:基于 3c2410 Linux2.6.22 移植

经历近2周的时间,查阅大量的参考资料和贴子,终于成功将Linux2.6.22移植到ARM2410上。中间走了不少弯路,不过走弯路也是一种收获,因为可以碰到和解决许多问题,增长知识。因为Linux版本问题以及开发平台的不同,网上的很多文章并不完全适合自己的板子,需要自己摸索和修改。写这点东西算是对前一阶段工作的总结,以免将来忘记。


移植大体的步骤主要有:


(2) 开发板(我用的是博创的2410)NAND flash 分区管理;


(3) LCD、网卡驱动的移植;


(4) linux内核配置和编译;


(5) rootfs的制作;


(6) 完成linux的启动和文件系统的挂载。


下面我会按照步骤逐一介绍。


一、 交叉编译环境的建立


建立交叉编译环境就是在宿主机(也就是pc机)的系统上建立一个模拟ARM的工作环境,使得在这个环境下编译产生的程序能够顺利的在ARM上的系统内运行。主要工作包括binutils、gcc以及glibc的编译生成,还有一些环境变量的设置。


(1)准备工作:


下载源代码包: binutils-2.18.tar.bz2,gcc-4.2.1.tar.bz2,glibc-2.6.1.tar.bz2,glibc-ports-2.6.1.tar.gz,linux-2.6.22.tar.bz2


补丁包: binutils-2.18-genscripts_multilib-1.patch


binutils-2.18-posix-1.patch


gcc-4.2.1-cross_search_paths-1.patch


gcc-4.2.1-posix-1.patch


gcc-4.2.1-specs-1.patch


glibc-2.6.1-cross_hacks-1.patch


glibc-2.6.1-hppa_nptl-1.patch


glibc-2.6.1-libgcc_eh-1.patch


glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch


glibc-2.6.1-sysdep_cancel-1.patch


glibc-csu.patch


注:Binutils 是一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具;


GCC是C编译器,用来将C代码编译成汇编代码;


Glibc就是gcc编译时需要的库了,glibc-ports是提供glibc对ARM的支持;


Linux-2.6.22.tar.bz2是内核源代码包。


需要注意的是gcc和glibc以及linux内核版本需要保持对应。如果用比较老的编译器去编译新的内核,或者用新的编译器编译老版本的内核,会出现一些莫名其妙的错误。另外补丁包也是必备的,否则编译过程中也会出错。刚开始我就深受其害。


(2)工作目录的建立:


目录的结构可以参考《Building.Embedded.Linux.Systems》。推荐整个目录放到/usr/local下,这样所有的用户都有访问权限。我当初没经验,直接放到home下了,后来会有些用户权限的小麻烦。这里给出我的目录结构:


$root@host:/home# ls


arm host


其中host是我的普通登陆用户帐号目录,arm就是工作目录了。为了方便,我平时用root登陆。


$root@host:/home# cd arm


$root@host:/home/arm# mkdir build-tools kernel rootfs tmp tools


其中编译交叉工具时的主要工作都在build-tools目录下完成,kernel目录用来存放内核源代码,rootfs目录是用来建立启动根文件系统的(后面会详细介绍),tmp是临时文件存放目录,tools目录就是最终生成的编译器gcc和glibc存放的地方。


(3)设置环境变量:


$root@host:/home/arm# export PRJROOT=/home/arm


$root@host:/home/arm# TARGET=arm-linux


$root@host:/home/arm# PREFIX=${PRJROOT}/tools


$root@host:/home/arm# TARGET_PREFIX=${PREFIX}/${TARGET}


$root@host:/home/arm# PATH=${PREFIX}/bin:${PATH}


其中TARGET定义了交叉工具的工作平台类型,PREFIX指定交叉工具的最终安装目录,PATH指定系统寻找交叉工具可执行文件所在的路径。


(4)编译前的准备:


$root@host:/home/arm# cd ${PRJROOT}/build-tools


$root@host:/home/arm/build-tools# mkdir build-binutils build-boot-gcc build-glibc build-gcc build-glibc-headers patch


将源码包放到这个目录下


$root@host:/home/arm/build-tools# ls


build-boot-gcc build-glibcbuild-binutils build-gcc build-glibc-headers patch


binutils-2.18.tar.bz2 gcc-4.2.1.tar.bz2 glibc-2.6.1.tar.bz2 glibc-ports-2.6.1.tar.gz


将补丁放到patch目录下:


$root@host:/home/arm/build-tools# cd patch


$root@host:/home/arm/build-tools/patch# ls


binutils-2.18-genscripts_multilib-1.patchbinutils-2.18-posix-1.patch


gcc-4.2.1-cross_search_paths-1.patch gcc-4.2.1-posix-1.patch


glibc-2.6.1-cross_hacks-1.patch


glibc-2.6.1-hppa_nptl-1.patch glibc-2.6.1-libgcc_eh-1.patch


glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch


glibc-2.6.1-sysdep_cancel-1.patch glibc-csu.patch


将内核源码包放到${PRJROOT}/kernel目录下


$root@host:/home/arm# cd kernel


$root@host:/home/arm/kernel# ls


linux-2.6.22.tar.bz2


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++异步编程方式 下一篇Linux下安装PCI转串口卡及USB转串..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: