移植Linux 2.6.26到S3C2410(ARM9)
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://eslxf.blog.51cto.com/918801/208633
为了便于开发、分析与测试驱动程序,我们针对远峰I型开发板构建了配套的Linux开发环境,涉及的所有工具与软件都是基于Linux平台。所以无需在多个操作系统中频繁切换,不仅节省时间,更重要的是促使开发人员进一步对开发主机Linux或目标机Linux环境的熟悉,从而加深对嵌入式Linux的理解。
本Linux开发环境的构建主要涉及下列内容:
1) 开发主机辅助环境与工具的配置
2) u-boot的移植
3) Linux内核的移植
4) 根文件系统的制作,尤其需要提供一个便于使用的NFS根文件系统
1. 硬件配置
本书的嵌入式Linux开发环境基于远峰I型开发板构建,其相关的硬件资源如下:
CPU:SAMSUNG S3C2410
NOR FLASH:Intel E28F320J3A(4MB)
NAND FLASH:SAMSUNG K9S1208VOM(64MB)
网卡芯片:CS8900A
2. 软件配置
构建开发环境所涉及到的软件配置主要包括开发主机的相关配置、目标机相关配置、交叉工具链与开发主机的主要开发文件目录结构。
2.1. 开发主机配置
开发主机的采用Fedora 8(内核2.6.23)的操作系统,其网络IP地址为135.1.2.192。同时需要支持TFTP、DHCP与NFS网络服务与有效的串口软件工具(此处采用Fedora 8自带的minicom软件包),以便于与目标机进行有效的通信。
2.2. 目标机配置
目标机的网络IP地址为135.1.2.150,采用u-boot-1.3.4作为启动加载程序,Linux内核版本为2.6.26.2,文件系统采用busybox-1.9.0制作,同时采用tinylogin软件包替代busybox自带的登陆控制功能部分。采用zlib-1.2.3与mtd-snapshot-20050519.tar.bz2软件包编译出jffs2文件的制作工具。
2.3. 配置交叉编译环境
构建开发环境时,u-boot-1.3.4的移植采用4.2.3版本的arm-linux交叉工具链,Linux内核与文件系统所涉及的移植均采用3.4.1版本的arm-linux交叉工具链。
从http://www.codesourcery.com/下载arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.tar交叉工具链,其版本为4.2.3。我们对其 bin目录下的所有文件arm-none-linux-gnueabi-*做符号连接为arm-linux-*,如arm-none-linux-gnueabi-gcc符号连接为arm-linux-gcc,以便使用。
在网站上下载3.4.1版本的交叉工具链。
修改/etc/profile文件,配置3.4.1版本的交叉工具链,然后就可直接使用3.4.1版本提供的交叉工具,如arm-linux-gcc等。
清单1 修改/etc/profile文件,配置3.4.1版本的交叉工具链
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /usr/local/arm/3.4.1/bin
fi
--------------------------------------------------------------------------------
[root@lxf /]# export PATH=/usr/local/arm/3.4.1/bin:$PATH
2.4. 开发主机的主要开发文件目录结构
为有效地管理文件与更易于操作,我们对开发相关的文件目录作出一定的规划。
清单2 开发文件目录结构
--------------------------------------------------------------------------------
[root@lxf /]# tree -L 1 /arm-linux/
/arm-linux/
|-- application
|-- driver
|-- linux-2.6.26.2
|-- rootfs
|-- tools
`-- u-boot-1.3.4_Nor_NAND
6 directories, 0 files
[root@lxf /]# tree -L 1 /arm-linux/rootfs/
/arm-linux/rootfs/
|-- cramfs-rootfs
|-- jffs2-rootfs
|-- mkroot
|-- nfs-rootfs
`-- yaffs2-rootfs
4 directories, 1 file