arm_linux内核配置

写在前面:整个过程描的非常详细,并且最后还介绍了一部分BusyBox,我顺便翻译了一下,翻译的很烂,见笑了。配置就是根据开发系统的需要对已有的系统进行裁减,保留需要的模块去掉不需要的模块。生成一个精简的系统的过程。

需要的软件包:

内核:

      linux-2.4.18-rmk.tar.bz2 ftp://ftp.kernel.org/      补丁:patch-2.4.18-rmk.tar.bz2   ftp://ftp.arm.linux.org.uk/   也可以直接下载打补丁的:linux-2.4.18-rmk7.bz2

交叉编译器:

       cross-2.95.3.tar.bz2

文件系统制作:

      busybox-1.00.pre10.tar.gz

制作过程:

$cd $HOME      //回到用户自己的根目录下


$mkdir $HOME/arm_skyeye

   建立交叉编译环境:

         $cd /usr/local

         $mkdir arm

         $cp $HOME/cross.2.95.3.tar.bz2 ./

         $tar jxf cross.2.95.3.tar.bz2

         $export PATH=$PATH:/usr/local/arm/2.95.3/bin    //设置交叉编译工具的路径

   交叉编译ARM Linux内核:(利用交叉编译环境编译生成目标板上可运行的系统内核)

$cd $HOME

$mkdir armlinux

$cd armlinux

$cp /linux-2.4.18-rmk7.bz2 ./

        $tar jxf linux-2.4.18-rmk7.bz2

$cd linux

$vi Makefile

    修改 CROSS_COMPILE=$(PWD)/../toolchains/bin/arm-linux-用#注释掉改为                  CROSS_COMPILE=/usr/local/arm/2.95.3/bin/arm-linux-

$make menuconfig

进入System Type 选择CLPS711X/EP721X--->CLEP7321--->File system 选择/pro file system support

                   ROM file system support

            second extend fs support

        --->Blcok devices 选择 .RAM disk support 和.Initial RAM disk (initrd) support

$make dep     //设置依赖关系

$make         //编译生成内核

完成以上,在当前目录下生成一个vmlinux的文件。这就是编译好的ARM Linux内核

$cp vmlinux $HOME/arm_skyeye      //将生成的内核复制到测试目录中

制作简单的文件系统并配置根文件系统:(由busybox完成,但是首先要交叉编译生成busybox,利用针对目标平台的交叉编译器)

$mkdir /tmp/target           //在根目录创建一个目录,用来保存busybox等执行文件

$cd $HOME

$mkdir busybox               //创建busybox目录

$cp /busybox-1.00.pre10.tar.gz ./

$gunzip busybox-1.00.pre10.tar.gz

$tar xvf busybox-1.00.pre10.tar

$cd busybox-1.00.pre10

$vi Makefile                 //修改Makefile将DOSTATIC的值为true

$vi init.c

#ifndef INIT_SCRIPT

/*#define INIT_SCRIPT"/etc/rc.d/rc.sysinit"注释掉,改为下句*/

#define INIT_SCRIPT"/etc/inittab"

#endif

$make TARGET_ARCH=arm CROSS=arm-linux-PREFIX=/tmp/target all install

        //上面的命令在/tmp/target/下产生如下:bin linuxrc sbin usr

创建文件系统的映像文件:

$cp $HOME

$mkdir /mnt/img                               //创建目录img,用于后面挂载映像文件

$dd if=/dev/zero of=initrd bs=1024k count=1   //制作一个大小为1M的空文件

$mke2fs -F -m0 initrd                         //将上面创建的文件格式化成EXT2文件系统

$mount -t ext2 -o loop initrd /mnt/img        //将格式化后的文件挂载到/mnt/img目录下

$cp -Rd /target/* /mnt/img                    //复制busybox生成的文件及目录到/mnt/img

配置根文件系统:

      上面的步骤已经有了一个文件系统所需要的一些文件,但是需要设置根路径,根路径的各个目录的意义和功能。

跟文件系统一般包括:/bin /etc /proc /tmp /var /dev /mnt

需要包括下列基本的设备文件:/dev/console /dev/fd0 /dev/null /dev/ram0 /dev/tty /dev/tty0

还包括下列的配置文件:/dev/rc.d/inittab /etc/rc.d/rc.sysinit /etc/fstab

        要实现基本的功能,还要包括一些常用的工具:sh ,ls ,cd,.......有busybox的帮助,所有这些功能都可以用busybox完成,保证整个文件系统可放在1MB的空间中。

下面配置其他信息

1)创建目录

#cd /mnt/img

#mkdir dev etc proc mnt tmp var //这里没有创建bin sbin usr是因为busybox已经生成并且在此之前将他们copy                                            //到/tmp/target/ ,然后又用命令$cp -Rd /target/* /mnt/img将他们拷贝               //到/mnt/img中了

#chmod 755 dev etc bin mnt tmp var

#chmod 555 proc

2) 创建设备文件

建立设备文件,一个简单的方法是复制主机/dev/目录下一些必要的设备文件到/target/dev/目录下

#cp -dpR /dev mnt/ (cp -dpR /dev /mnt 我认为这个不对,须验证!) //mnt是/mnt/img/下的mnt.-dp参数表示复制过程中保证链接文件保持不变,不会复制链接所指原文件,而且属性不变。然后删除不必要的 设备文件

3)创建相关启动配置文件

在/mnt/img/etc/目录下创建启动配置文件inittab,内容如下:::sysinit:/etc/rc

        /bin/ash和/sbin/init都是下面要介绍的程序busybox的符号链接。在/target/etc/目录下创建启动脚本rc,内容如下:

   #!/bin/sh

hostname ARM Linux

mount -t proc proc /proc

mkdir /var/tmp

mkdir /var/log

mkdir /var/run

mkdir /var/lock

cat /etc/motd

4)在/mnt/img/etc/目录下建立开发板上的文件系统配置文件fstab,内容如下: none /proc proc default

表示要创建/proc文件系统cp -dpR /dev mnt/

结束操作:

最后将映像文件umount,并将生成的文件系统复制到测试目录下

$umount /mnt/img

$cp $HOME/initrd $HOME/arm_skyeye/

5)下面开始用Skyeye转载ARM Linux核心和文件

$cd $HOME/arm_skyeye

$vi skyeye.conf          //生成skyeye.conf文件

#skyeye config file sample

cpu: arm720t

mach: ep7312

mem_bank: map=I, type=RW, addr=0x80000000, size=0x00010000

mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00200000

mem_bank: map=M, type=RW, addr=0xc0200000, size=0x00200000, file=./initrd

mem_bank: map=M, type=RW, addr=0xc0400000, size=0x01000000

log:logon=0,logfile=/tmp/test.log,start=5000000,end=6000000

 

        "./initrd"表示刚生成的文件系统映像文件

$skyeye            //进入skyeye

$file vmlinux      //装入内核

$target sim        //读取skyeye.conf文件,配置模拟信息

$load              //加载模块

$run               //在skyeye中运行

 

        ./initrd文件系统映像会由内核从指定的存储设备中读出(skyeye.conf文件给出这些信息),将其安装正根文件系统

        Bootloader用来加载内核映像,这是由Bootloader的内核基地址必须和内核映像在编译时所用的运行基地址一致,这样才能 正确加载内核映像。

 

busybox:

1.安装交叉编译器,要把编译完的busybox在哪个平台运行,就安装那个平台的编译器

2.下载busybox的源代码,解开后,运行make menuconfig ,在上面选择你所要的项就行了,其中有个关于设置交叉编译器路径的选项,就要把这项选的路径指到刚才安装交叉编译器的路么就行了

3.配制完后,编译一下,编译完后,用make install ,后面带要安装的路径的参数(具体可看一下help),这时你就可在你指定的安装路径下看到几个文件,里面是BUSYBOX的命令

4.把这几个文件和你的文件系统组合一下就可用了。

busybox:从名字就可以看到,Busybox就是一个“繁忙的盒子”,即“一个程序完成所有的事”。平时我们用ls, vi等程序 ,都要用到glibc的相关调用,所以如果每个程序都静态链接这些调用,每个程序都会很大,所以通常的发行版中,都会动态 链接glibc,可是glibc的动态库本身就很大,好像是6M吧,在嵌入式系统中,这个太大了,而且又不是所有的库函数都使用 。这时有两种解决办法,一个是裁剪glibc,一个就是busybox的办法,把ls, vi等程序的main函数改一下名,全部链接在一 起,然后静态链接glibc,这样,只有需要的调用才会链接进来,整个busybox程序可能都比glibc的动态库小。busybox根 据文件名来决定用户想调用的是那个程序,例如,如果你的busybox程序的文件名是ls,运行的就是ls,是vi,就运行vi。 所有你编译完后,安装时就是拷贝一个busybox,然后建议一堆链接:ln -s busybox ls; ln -s busybox vi...

BusyBox: The Swiss Army Knife of Embedded Linux

BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete environment for any small or embedded system.

 

BusyBox has been written with size-optimization and limited resources in mind. It is also extremely modular so you can easily include or exclude commands (or features) at compile time. This makes it easy to customize your embedded systems. To create a working system, just add some device nodes in /dev, a few configuration files in /etc, and a Linux kernel.

BusyBox is maintained by Erik Andersen, and licensed under the GNU GENERAL PUBLIC LICENSE

小呆:这些都是直译,如果对BusyBox有初步的了解就应该知道我写的是什么意思了。不保证翻译的一定正确,我对BusyBox也是略知皮毛。

BusyBox是嵌入式Linux系统的瑞士军刀

BusyBox联合多数版本的UNIX的共有的有用的东西成为一个单一的小的可执行的文件。它用来代替多数的GUN中常用的文件单元、shell单元等。在BusyBox中的这些单元的选项要比完整GUN中的少。但是他们提供了预期的根功能和行为,就像一个GNU的副本。BusyBox为小型的或者嵌入式的操作系统提供公平完善的环境。

BusyBox已经被写(开发)成大小最优并且资源极限的。它是一个抽象模型,在编译时可以容易的包含或者拒绝命令(或者模块),这可以容易的制作自己的嵌入式操作系统。创建一个工作系统只需要在/dev目录下添加一些驱动文件,/etc目录下添加一下配置文件和一个Linux内核。

Erik Andersen,维护BusyBox,并得到了GNU GENERAL PUBLIC LICENSE的许可。

你可能感兴趣的:(arm_linux内核配置)