Linux移植开发

准备工作:

准备交叉编译工具链:这里我们选择DENX软件工程提供的ELDK交叉编译环境,参考地址:http://ftp.denx.de/pub/eldk/4.2/,我们使用其中的一套工具。准备工作步骤如下:

1. 建立工作文件夹NewMsg2410,并建立子目录sources works tools

mkdir NewMsg2410

mkdir sources works tools

2. 准备arm-2008-11-24.iso 到sources目录,并切换到sources目录,建立临时目录tmp挂载使用

mkdir tmp

3. 挂载iso并安装

挂载iso

mount -o loop arm-2008-11-24.iso ./tmp

切换到tmp下

cd tmp

执行安装脚本,-d指定安装文件夹,我们选择 ../../tools/eldk42文件夹

./install –d ../../tools/eldk42

卸载iso

umount tmp

4. 设置系统环境变量

vi ~/.bashrc

最后一行添加

PATH = $PATH:用户选择的目录/NewMsg/tools/eldk42/usr/bin

此时设置了当前用户的环境变量,为了不混淆,可以重新登录root用户,使环境变量加载,当然也可以source 命令导出

5. 确认安装

查看环境变量

echo $PATH

查看编译器版本

arm-linux-gcc –v

4.1 编译u-boot

Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。

在此,我们选择较新版本:u-boot-2009.11,编译步骤如下:

1.准备源代码

cd NewMsg2410/sources

cp u-boot-2009.11.tar.bz2 ../works/

进入作品目录

cd ../works/

解压源代码

tar vxjf u-boot-2009.11.tar.bz2

此时,当前目录下,生成u-boot-2009.11文件夹

2. 编译uboot

cd u-boot-2009.11

清理文件

make clean distclean

执行配置

make ARCH=arm CROSS_COMPILE=arm-linux- NewMsg2410_config

编译uboot

make ARCH=arm CROSS_COMPILE=arm-linux-

当前目录下生成uboot.bin,烧写系统用

4.2 编译linux内核

嵌入式 Linux是以Linux为基础的嵌入式作业系统,它被广泛应用在移动电话、个人数字助理(PDA)、媒体播放器、消费性电子产品以及航空航天等领域中。

在此,我们使用较新版本:,步骤如下:

1. 准备源代码

cd NewMsg2410/sources/

cp linux-2.6.30.tar.bz2 ../works/

解压源代码

tar vxjf linux-2.6.30.tar.bz2

此时,在当前目录下,生成linux-2.6.30文件夹

2. 编译linux内核

cd linux-2.6.30

清理中间文件

make clean distclean mrproper

可以自行配置内核

make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

也可以直接加载配置文件

cp NewMsg2410_config .config

编译内核,生成uboot可以加载的格式uImage,同时也生成了其他格式映像文件

make ARCH=arm CROSS_COMPILE=arm-linux- uImage

一段时间后,在arch/arm/boot/目录下生成uImage映像

4.3根文件系统制作

当前存在很多格式文件系统,我们在此仅以jffs2文件系统为例子,说明根文件系统的制作工程和方法,详细的教程请参加威步科技出品的嵌入式linux开发从入门到精通pdf文件即可。我们知道,要保证内核能够挂载到文件系统,要保证内核能够找到一个初始化用的init程序和inittab脚本,其中init程序可以位于根文件系统的bin,sbin,usr/bin,usr/sbin下,init启用inittab的脚本配置,所以我们构建最小的根文件系统,至少要包含一个init程序和一个inittab的脚本。BusyBox工具,集大多数unix工具于一身,在嵌入式linux根文件系统中使用广泛,我们以此为例,开始最小根文件系统的制作。步骤如下:

1. 准备BusyBox源码

cd NewMsg2410/sources/

cp busybox-1.15.3.tar.bz2 ../works/

解压源代码

tar vxjf busybox-1.15.3.tar.bz2

解压后得到目录busybox-1.15.3

2. 编译BusyBox

cd busybox-1.15.3

make clean distclean mrproper

配置busybox

make ARCH=arm CROSS_COMPILE=arm-linux- oldconfig

编译busybox

make ARCH=arm CROSS_COMPILE=arm-linux-

安装到当前目录_install 文件夹

make make ARCH=arm CROSS_COMPILE=arm-linux- install

3. 构建最小根文件系统

回到works目录

cd NewMsg2410/works/

建立根文件系统目录

mkdir rootfs

cd rootfs

复制busybox生成的_install文件夹到rootfs

cp –r ../busybox-1.15.3/* .

ls查看生成的只包含基本程序的文件系统

发现只有 bin usr sbin三个文件夹和linuxrc文件

查看bin ,usr/bin,usr/sbin, sbin发现,init程序在sbin文件夹可以找到

下面构建初始化脚本inittab,步骤如下:

mkdir etc

cd etc

mkdir init.d

touch inittab

vi inittab

添加以下内容:指定系统初始化脚本

::sysinit:/etc/init.d/rcS

::respawn:-/bin/sh

tty2::askfirst:-/bin/sh

::ctrlaltdel:/bin/umount -a -r

所以接下来,建立init.d目录和rcS脚本

mkdir init.d

cd init.d

touch rcS

vi rcS

添加以下内容:

#! /bin/sh

echo “initing the system……”

rcS添加可执行权限

chmod a+x rcS

添加设备文件目录

mkdir dev

添加设备文件

mknod console c 5 2

mknod null c 1 3

mknod zero c 1 5

至此,最小文件系统根目录,已经建成,下面打包成jffs2映像,用来烧录

回到works目录

cd NewMsg2410/works/

mkfs.jffs2 -d rootfs/ -o rootfs.jffs2

在当前目录下,生成rootfs.jffs2根文件系统映像

Logo

更多推荐