嵌入Linux系统的构建

文件系统是对一个存储设备上的数据和元数据进行组织的机制。这种机制有利于用户和操作系统的交互。
嵌入式Linux系统由Linux内核和根文件系统两部分组成,两者缺一不可。
嵌入Linux系统的构建_第1张图片

内核制作:
1. 清除所有配置和中间文件
    X86:make  distclean
    Arm:  make  distclean
2. 配置内核
    X86:make  menuconfig
    Arm:  make  menuconfig  ARCH=arm  
3. 编译内核
    X86:make  bzImage
    Arm:  make  uImage  ARCH=arm  CROSS_COMPILE=arm-linux-
    make  -j4  bzImage  //表示用4线程编译
根文件系统: Linux启动时,使用的第一个文件系统。

根文件系统的制作:
1.创建根文件系统的目录
 mkdir  rootfs
 cd  rootfs
 mkdir  bin  dev etc lib proc sbin sys usr mnt tmp var
 mkdir  usr/bin  usr/lib  usr/sbin  lib/modules
2. 创建设备文件
 cd  dev/
 mknod  -m  666  console  c  5   1
 mknod  -m  666  null  c  1  3
 cd ..
3.  安装/etc
    tar  etc.tar.gz  -C   /xxxx/rootfs
    这是利用已有的etc配置目录,当然也可以自己新建这些配置文件。
4. 编译内核模块
  进入到编译内核的内核源码顶层目录中。
  make  modules  ARCH=arm  CROSS_COMPILE=arm-linux-
5. 安装内核模块
   make  modules_install  ARCH=arm INSTALL_MOD_PATH= /xxxx/rootfs  
   该命令只是将上一步编译生成的内核模块,从内核源码中相应目录拷贝到/xxxx/rootfs/lib/modules目录下。
6. 配置busybox
    进入busybox源码目录
    配置:
   make  menuconfig 
   嵌入Linux系统的构建_第2张图片
7. 编译、安装busybox
   make  ARCH=arm  CROSS_COMPILE=arm-linux-
   make install

NFS启动设置
如果想使用nfs作为根文件系统, 则要
1. 修改Linux内核源码中.config中的启动参数即修改其中的CONFIG_CMDLINE变量为如下:
 CONFIG_CMDLINE="root=/dev/nfs rw nfsroot=192.168.0.10:/home/xgm/rootfs ip=192.168.0.13 console=ttySAC0  mem=64M"
注释:
root=/dev/nfs : 指明使用使用哪种文件系统作为根文件系统,这里表示使用nfs作为根文件系统,
                           若root=/dev/ram,表示使用ramdisk作为根文件系统
rw : 权限,可读,可写。
nfsroot=192.168.0.10:/home/xgm/rootfs:根文件系统存储的位置, 192.168.0.10为存储根文件系统的计算机的IP
                                                                               /home/xgm/rootfs为根文件的目录。
ip=192.168.0.13:开发板启动后的IP地址。
console=ttySAC0:表明使用串口0作为控制台。
mem=64M:开发板内存的大小。
2. 重新编译内核。
 
制作Ramdisk
基于前面步骤制作好的根文件系统 /xxxx/rootfs
1. genext2fs  -b  8192  -d  /xxxx/rootfs  ramdisk
    genext2fs为制作ramdisk的工具,也可用其他工作来制作。
2. 压缩
   gzip  -9  -f  ramdisk

Ramdisk启动设置:
1. 修改Linux内核源码中.config中的启动参数即修改其中的CONFIG_CMDLINE变量为如下:
      CONFIG_CMDLINE="root=/dev/ram rw console=ttySAC0 mem=64M"
2. 重新编译内核。

制作Initramfs
1.配置内核,使其支持Initramfs
  进入内核源码目录,执行
  make  menuconfig   ARCH=arm
  在General Setup菜单下,将"Initial RAM filesystem and RAM disk(initramfs/initrd) support"
  选项给选中。
   嵌入Linux系统的构建_第3张图片
  并将上图中蓝色部分中的"../../rootfs"修改为你制作的rootfs文件目录/xxxx/rootfs,注意并非ramdisk目录。
2. 进入制作好的根文件系统(/xxxx/rootfs)中,执行
     ln  -s  ./bin/busybox  init
3.  修改Linux内核源码中.config中的启动参数即修改其中的CONFIG_CMDLINE变量为如下:
     CONFIG_CMDLINE="console=ttySAC0  mem=64M"
     具体修改参数,根据不同的硬件,不同。
4. 重新编译内核。
注意:使用Initramfs时,内核和根文件系统是一起编译成了一个文件了的。
  
vmlinux:原始的,未压缩的内核镜像
zImage:压缩过的vmlinux内核镜像,文件开始为一段解压程序,故可自解压。
uImage:uboot引导的zImage














来自为知笔记(Wiz)


你可能感兴趣的:(嵌入Linux系统的构建)