现在的位置: 首页 > 综合 > 正文

arm linux内核配置

2018年03月16日 ⁄ 综合 ⁄ 共 5658字 ⁄ 字号 评论关闭
 arm linux内核配置

配置就是根据开发系统的需要对已有的系统进行裁减,保留需要的模块去掉不需要的模块。生成一个精简的系统的过程。

需要的软件包:
  内核:
      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          //生成ksyeye.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 

抱歉!评论已关闭.