• 嵌入式linux内核制作、根文件系统制作


    嵌入式系统构成:

    主要由bootloader、kernel、以及根文件系统三部分组成。

    内核制作步骤:

    制作嵌入式平台使用的linux内核制作方法与pc平台上的linux内核基本一致

    1.清除原有配置与中间文件

    x86:make distclean

    arm:make distclean

    2.配置内核

    x86:make menuconfig

    arm: make menuconfig ARCH=arm

    3编译内核4

    x86:make bzImage

    arm:make uImage ARCH=arm CROSS_COMPILE=arm-linux-

    注意make zImage与make uImage的区别

    make uImage会先产生zImage,然后再产生uImage(再zImage的基础上加上48字节的头,包括压缩方式等)

    用tftp下载时,需要把zImage拷贝到/tftp文件夹下

    根文件系统制作

    文件系统包含两个层次的含义:

    1、按照固定格式组织的目录与文件(看的见)

    2、在特定的存储介质上管理这些目录和文件需要的数据(看不见)

    制作文件系统步骤:

    1、创建目录和文件

    2、位创建好的目录和文件建立管理数据

    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:创建设备文件
    mknod -m 666 null c 1 3

    3、安装/etc

    tar etc.tar.gz  -C  /XXX/rootfs

    4、编译内核模块

    进入linux内核目录下

    make modules ARCH=arm  CROSS_COMPILE=arm-linux-           //编译的结果,内核模块.ko文件散落在各个角落中

    5、安装内核模块

    make modules_install ARCH=arm INSTALL_MOD_PATH=../rootfs  //把.ko文件copy到lib/modules中

    安装/编译busybox

    Busybox: 嵌入式开发中的瑞士军刀

    1.配置busybox
    #make menuconfig    //进入busybox目录下
    a、进入Busybox Settings ->build Options->
    选中 “Build busybox as a static binary”, 静态链接

    Cross Compiler prefix (arm-linux-)
    Installation Options->
    选中 “Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的/usr目录下,破坏宿主系统

    Busybox Installation Prefix (/xxx/rootfs)
    该选项表明编译后的busybox
    的安装位置

    编译安装busybox

    make:编译

    make install   //安装

    文件系统类型

    linux引入虚拟文件系统VFS(Virtual File System)。

    在嵌入式linux应用中,主要的存储设备为RAM和FLASH。常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,ramdisk,ramfs等。 

    jffs2:日志闪存文件系统版本2,用于NOR flash,可读写、支持数据压缩的日志文件系统。

    yaffs/ubitFS:用于nand flash设计的一种日志型文件系统,不支持数据压缩。

    Cramfs:只读的压缩文件系统。(用的越来越少)

    Ramdisk:将部分固定大小的内存当做块设备来使用。

    Initramfs:将内存当做块设备用(现在用的多)

    NFS:网络文件系统。 (开发阶段使用)

    把zImagecopy到/tftp下

    tftp 31000000 zImage

    nand erase 200000 300000(offset  size)

    nand write 31000000 200000 300000(内存addr offset  size)

    利用Initramfs特点:每次添加一个功能都需要重新编译内核,重新下载。

  • 相关阅读:
    学习python第四天——列表方法
    昨天休息了一天,今天补上。列表学习
    第二天学习——字符串的方法
    mongodb
    linux学习篇(一)
    mysql优化
    linux服务
    vue配置服务器
    photoshop学习
    关于视图
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/8283635.html
Copyright © 2020-2023  润新知