嵌入式系统

1 嵌入式系统组成

  BootLoader、内核、根目录文件系统

2 BootLoader

  uboot是嵌入式启动程序BootLoader的业界老大,所以一般都用uboot。

  操作之前先make distclean以前的配置项。

2.1 配置uboot

  Uboot编译后要告诉映像运行在什么系统体系上。配置要在Makefile文件上进行,vim Makefile打开Makefile,如果是210开发板直接搜索 “/210”,然后通过next查询其他有用信息。查询跟开发板匹配的配置项,比如“tq210”;

    配置完成

2.2 编译uboot

  make ARCH=arm CROSS_COMPILE=arm-linux-

  编译完成后会生成一个uboot.bin 文件,是要烧写到开发板运行的;是一个二进制映像。

2.3 下载并运行

3 内核

3.1 内核配置(X86为例)

  为啥配置内核:通过软件需求和硬件需求,选出需要的、去掉不用的。硬件方面:比如是arm体系,x86就没用就不选;软件方面:比如是ipv4,选ipv6就没用。

  配置内核的方法:

  make config:基于文本模式的交互式配置

  make menuconfig:基于文本模式的菜单型配置(用这种方法方便、快捷)

  选项菜单:

  三种选择方式:<>、<*>、<M>

  <>:此次编译不选择该功能;

  <M>:module(内核模块)

  <*>:

  

  内核映像文件最终运行在内存中,系统启动,BootLoader会将zIMage解压到内存里,在内存里面运行。

  配置完成后用:ls –a查看 (a就是all)可以看到隐藏的文件,其中.config就是保存的配置文件。

  查看内容:vim  .config

  

    CONFIG:固定的标准格式;LOCALVERSION:配置项的名字;y=yes相当于<*>;没有配置的加'#',加'is not set';

  如何加载一个已有的配置文件,然后在其上面做修改?

    找到一个配置文件复制到当前目录下,然后make menuconfig -> load -> '文件路径文件名' -> ok;

3.2 编译内核

3.2.1 编译内核生成镜像文件

  make zImage:主要用于小于512K

  make bzImage:

  make bzImage V=1 :查看编译的详细信息

  编译好的内核位于arch/<cpu>/boot/目录下 

3.2.2 编译内核模块(<M>产生内核模块)

  make modules:内核模块散落在各个文件中,.ko文件就是内核模块,查看方式ls *.ko;

  make modules_install:要把内核模块放到/lib/modules目录下面。使用操作:make modules_install会把散落的文件移动到/lib/modules目录下。

3.3 制作init ramdisk(即将所有内核模块打包为一个文件)

  命令:mkinitrd  initrd-$version  $version

  例子:mkinitrd  initrd-2.6.32  2.6.32

            initrd-2.6.32 打包成文件的名字

  $version 为通过make modules_install移动到一个文件夹的内核模块文件的文件名,可以通过查询/lib/modules下的目录得到。

3.4 安装内核

  将映像文件和打包好的modules文件复制到boot目录下,Linux启动的时候BootLoader会到boot目录下找文件。

3.4.1 复制zImage镜像文件到boot中

  cp arch/x86/boot/bzImage /boot/vmlinuz-$version 取得名字

3.4.2 复制moduls文件到boot文件中

  cp initrd-$version /boot/

3.4.3 修改/etc/grub.conf     /*这是启动的配置文件*/

  保存后重新启动Linux系统。启动时有一个倒计时的地方,然后立即按下回车,可以选择系统要启动内核。

  启动完成后:

  用 uname –r 命令:查看正在运行的内核版本。

 

  内核运行在内存

  文件系统存放在硬盘或者开发板的flash

3.5 清理内核

要清楚编译内核的时候产生了什么。配置时产生了.config文件;编译的时候产生了.o文件,汇总成了bzImage;还产生一些.ko文件

  make clean:清理.o文件,没有清除掉.config文件,

  ls  /drivers/net  可以看到有很多.ko文件

  make distclean  可以清除掉配置文件也可以清除掉.o文件

4 嵌入式Linux内核制作

  制作嵌入式平台使用的Linux内核,方法和制作PC平台的Linux内核基本一致;

4.1 复制解压一个Linux内核代码

4.2 make  distclean 清除以前的配置项

4.3 配置内核make menuconfig  ARCH=arm

4.4 编译内核make uImage ARCH=arm  CROSS_COMPILE=arm-linux-

    如果报错:将tools中的mkimage文件复制到bin文件夹,然后在重新编译;

    然后将uImage.bin文件复制到根目录下的tftpboot文件夹下。然后通过serial com下载到目标板

5 根文件系统的制作

5.1 建立根文件系统目录与文件

5.1.1 创建目录

  先创建一个目录然后进入

      mkdir rootfs

      cd rootfs

  然后批量的创建开发板需要的以下目录:

      mkdir bin devetc lib proc sbin sys usr mnt tmp var

      mkdir usr/bin usr/lib usr/sbin lib/modules

5.1.2 创建设备文件(只能在root模式下创建)

      cd  rootfs/dev

    mknod  -m  666  console  c  5  1

      mknod  -m  666  null  c  1  3

5.1.3 加入配置文件

      将etc.tar.gz中的文件解压后都复制到etc文件中。

5.1.4 添加内核模块

      cd …/linux      /*进入可以编译内核的文件夹*/ (即内核制作的文件夹)

      make modules ARCH=arm CROSS_COMPILE=arm-linux-

      make modules_install ARCH=arm INSTALL_MOD_PATH=…/rootfs

               粉色处为路径:home/dongry/rootfs

5.1.5 解压后进入busybox文件并配置、编译、安装busybox:

    make  menuconfig:进入配置界面

      进入Busybox Settings àbuild Options->选中“Build busybox as astatic binary”,静态链接

   进入Cross Compiler prefix改为(arm-linux-)
    进入Installation Options->选中“Don‘t use /usr”,选中该项可以避免busybox被安装到宿主系统的/usr目录下,破坏宿主系统
    进入Busybox Installation Prefix改路径(/xxx/rootfs),该选项表明编译后的busybox的安装位置

  编译busyboxmake

  安装busyboxmake install

5.2 挂载根文件系统

  根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM和FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs2, ubifs, ramdisk等

5.2.1 initramfs方式

  软连接

    ln –s ./bin/busybox  init  /*-s:软链接; init:软连接名字*/

  进入内核文件

    make menuconfig ARCH=arm

    general setup-><*>Initial RAM filesystem and RAM disk (initramfs/initrd) support

   然后在Initramfs source file(s)处添加rootfs的路径

  配置完成后重新编译内核:make uImage ARCH=arm CROSS_COMPILE=arm-linux-

  因为文件系统是挂载到内核上的,所以需要重新编译内核

5.2.2 NFS方式

  此种方式的特点:当文件系统需要重新添加一个文件的时候,initarmfs还得需要重新编译内核,而NFS方式是直接通过网络连接的会直接反馈到系统上,不需要重新编译内核。

  内核配置:make menuconfig ARCH=arm

  取消掉上边方式的配置项,并退出;

  进入file system->networking file systems->保证root file system on nfs被选中,退出保存

  然后进行内核编译:make uImage ARCH=arm CROSS_COMPILE=arm-linux-

  因为文件系统是挂载到内核上的,所以需要重新编译内核。

   

猜你喜欢

转载自www.cnblogs.com/dongry/p/10599145.html