busybox引导linux内核_linux移植教程

busybox引导linux内核_linux移植教程文章目录一、搭建NFS服务器二、使用BusyBox构建跟文件系统2.1修改顶层Makefile2.2busybox中文支持2.3配置busybox2.4编译busybox2.5向根文件系统添加lib库2.5.1向{rootfs}/lib目录下添加库文件2.5.2向{rootfs}/usr/lib目录下添加库文件2.6创建其他文件夹三、测试文件系统(NFS挂载)3.1设置uboot中环境变量3.2命令解析四、完善文件系统4.1创建{rootfs}/etc/init.d/rcS文件4.2

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


一、搭建NFS服务器

查看另一篇博客:《1.3、Ubuntu18.04搭建NFS服务器

二、使用BusyBox构建跟文件系统

  1. 下载busybox源码:

    【点此进入busybox官网】,网站链接为:https://busybox.net/。进入官网后依次查找下述菜单,进入下载页面。

    ->Get BusyBox
        ->Download Source
    

2.1 修改顶层Makefile

  1. 进入Makefile

    vim Makefile
    
  2. 找到CROSS_COMPILE和ARCH,并进行修改

    将
    CROSS_COMPILE ?=
    
    修改为   # 备注:后面的路径为交叉编译工具链安装路径
    CROSS_COMPILE ?= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
    
    将
    ARCH ?= $(SUBARCH)
    
    修改为:
    ARCH ?= arm
    

2.2 busybox中文支持

  1. 该步骤可有可无,此处不再赘述。可以查阅正点原子《嵌入式驱动开发指南》的《根文件系统构建》章节。

2.3 配置busybox

  1. 执行下属命令,采用默认配置即可:

    make defconfig
    make menuconfig
    
  2. 采用动态编译,所以不要选中:

    Location:
        -> Settings
            -> Build static binary (no shared libs)
    
  3. 选中:

    Location:
        -> Settings
            -> vi-style line editing commands
    
  4. 不要选中:

    Location:
        -> Linux Module Utilities
            -> Simplified modutils
    
  5. 确保mdev下面的子选项全部选中:

    Location:
        -> Linux System Utilities
            -> mdev (16 kb) //确保下面的全部选中,默认都是选中的
    
  6. 选中unicode编码,以支持中文选中unicode编码,以支持中文

    Location:
        -> Settings
            -> Support Unicode //选中
            -> Check $LC_ALL, $LC_CTYPE and $LANG environment variables //选中
    

2.4 编译busybox

  1. 执行命令

    make install CONFIG_PREFIX=/home/lsy/tools/lsy/nfs/rootfs
    

    CONFIG_PREFIX参数指定生成的根文件系统保存的路径。

    至此可以看到上述目录下已经生成了一个简单的文件系统,但是还需要添加一些其他文件完善rootfs。

2.5 向根文件系统添加lib库

2.5.1 向{rootfs}/lib目录下添加库文件

从交叉编译工具链的安装目录中拷贝lib库到rootfs的lib中。

  1. 在rootfs中创建lib文件夹

    cd /home/lsy/tools/lsy/nfs/rootfs
    mkdir lib
    
  2. 拷贝{交叉编译工具链安装目录}/libc/lib/中的库文件到{rootfs}/lib目录下

    备注1:“-d”表示拷贝符号链接,有个比较特殊的库文件: ld-linux-armhf.so.3,此库文件是个符号链接,相当于 Windows 下的快捷方式。

    备注2:rootfs/lib目录中的d-linux-armhf.so.3是一个软连接,没用,所以先删除在将源文件拷贝进去

    cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/
    cp *so* *.a /home/lsy/tools/lsy/nfs/rootfs/lib/ -d
    rm /home/lsy/tools/lsy/nfs/rootfs/lib/ld-linux-armhf.so.3
    cp ld-linux-armhf.so.3 /home/lsy/tools/lsy/nfs/rootfs/lib/
    
  3. 拷贝{交叉编译工具链安装目录}/lib目录中的库文件到到{rootfs}/lib目录下

    cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/
    cp *so* *.a /home/lsy/tools/lsy/nfs/rootfs/lib/ -d
    

2.5.2 向{rootfs}/usr/lib目录下添加库文件

  1. 在rootfs中创建lib文件夹

    cd /home/lsy/tools/lsy/nfs/rootfs/usr
    mkdir lib
    
  2. 拷贝{交叉编译工具链安装目录}/libc/usr/lib

    cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/
    cp *so* *.a /home/lsy/tools/lsy/nfs/rootfs/usr/lib/ -d
    
  3. 至此,库文件添加完成,输入如下命令复查文件库文件大小

    #命令:
    cd /home/lsy/tools/lsy/nfs/rootfs/
    du ./lib ./usr/lib -sh
    
    #结果如下:
    57M     ./lib
    67M     ./usr/lib
    

2.6 创建其他文件夹

  1. 创建如下文件夹

    cd /home/lsy/tools/lsy/nfs/rootfs/
    mkdir dev proc mnt sys tmp root
    

三、测试文件系统(NFS挂载)

3.1 设置uboot中环境变量

  1. 设置uboot中环境变量,命令如下

    setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.0.250:/home/lsy/tools/lsy/nfs/rootfs ip=192.168.0.100:192.168.0.250:192.168.0.1:255.255.255.0::eth0:off'
    saveenv
    

3.2 命令解析

  1. 命令解析

    console=ttymxc0,115200
    
    解析:
        串口
    
    root=/dev/nfs rw 
    
    解析:
        nfs,可读可写
    
    nfsroot=192.168.0.250:/home/lsy/tools/lsy/nfs/rootfs 
    
    解析:
        192.168.0.250是nfs服务器IP,即:nfs文件系统所在linux机器的IP
        /home/lsy/tools/lsy/nfs/rootfs是rootfs保存的目录。
    
    ip=192.168.0.100:192.168.0.250:192.168.0.1:255.255.255.0::eth0:off'
    
    解析:
        192.168.0.100为:开发板ipaddr
        192.168.0.250为:nfs服务器的IP
        192.168.0.1为:网关
        255.255.255.0为:子网掩码
        eth0为:网卡名称
    

四、完善文件系统

4.1 创建{rootfs}/etc/init.d/rcS 文件

rcS 是个 shell 脚本, Linux 内核启动以后需要启动一些服务,而 rcS 就是规定启动哪些文件的脚本文件。

  1. 创建rcs文件

    cd /home/lsy/tools/lsy/nfs/rootfs/
    mkdir etc/init.d -p    #注意路径是在rootfs目录下,即上步的cd命令一定要先执行,千万别敲成根目录了
    cd etc/init.d/
    touch rcS
    vim rcS
    
  2. 在rcs中加入如下代码:

    #!/bin/sh
    
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
    export PATH LD_LIBRARY_PATH
    
    mount -a
    mkdir /dev/pts
    mount -t devpts devpts /dev/pts
    
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    
  3. 赋予rcS文件可执行权限

    chmod 777 rcS
    

4.2 创建{rootfs}/etc/fstab 文件

  1. 创建fstab文件

    cd /home/lsy/tools/lsy/nfs/rootfs/etc/
    touch fstab
    vim fstab
    
  2. 在文件中加入如下内容:

    #<file system>   <mount point>   <type>   <options>   <dump>   <pass>
    proc             /proc           proc     defaults    0        0
    tmpfs            /tmp            tmpfs    defaults    0        0
    sysfs            /sys            sysfs    defaults    0        0
    

4.3 创建{rootfs}/etc/inittab 文件

  1. 创建inittab文件

    cd /home/lsy/tools/lsy/nfs/rootfs/etc/
    touch inittab
    vim inittab
    
  2. 在文件中加入如下内容:

    #etc/inittab
    ::sysinit:/etc/init.d/rcS
    console::askfirst:-/bin/sh
    ::restart:/sbin/init
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a -r
    ::shutdown:/sbin/swapoff -a
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185159.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 射频RC522一些知识「建议收藏」

    射频RC522一些知识「建议收藏」我的测试为RC522的读写模块和S50的射频卡:一.S50的射频卡有如下特点:1. 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位2. 每个扇区有独立的一组密码及访问控制3. 每张卡有唯一序列号,为32位 二.射频卡的介绍1、M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63,

    2022年7月26日
    12
  • createmutex怎么用_create的用法和短语

    createmutex怎么用_create的用法和短语HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针BOOL bInitialOwner, // 初始化互斥对象的所有者LPCTSTR lpName // 指向互斥对象名的指针);1. CreateMutex只是创建了一把锁,  这把锁你用来锁门还是锁抽屉还是锁

    2022年10月5日
    0
  • java tess4j 示例_java 使用tess4j实现OCR的最简单样例[通俗易懂]

    java tess4j 示例_java 使用tess4j实现OCR的最简单样例[通俗易懂]网上很多教程没有介绍清楚tessdata的位置,以及怎么配置,并且对中文库的描述也存在问题,这里介绍一个最简单的样例。1、使用maven,直接引入依赖,确保你的工程JDK是1.8以上net.sourceforge.tess4jtess4j4.3.12、实现代码publicclassOCRDemo{publicstaticvoidmain(Stringargs[])throwsExce…

    2022年5月12日
    35
  • 图论——握手定理_离散数学 树 握手定理

    图论——握手定理_离散数学 树 握手定理这是一个非常重要的图论定理在多出用到:握手定理:在任何有向图图中,所有顶点的度数之和等于边数的2倍,所有顶点的入度之和等于所有顶点出度之和,等于边数无向简单图,同样所有顶点的度数之和等于边数的2

    2022年8月5日
    3
  • idea永久激活注册码【2021最新】

    (idea永久激活注册码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~0…

    2022年3月28日
    398
  • 概率论 协方差矩阵_方差和均值的性质

    概率论 协方差矩阵_方差和均值的性质http://blog.csdn.net/pipisorry/article/details/48788671要理解协方差矩阵,从以下几个步骤来说期望——>方差——>协方差——>协方差矩阵,这样更能理解它的由来和意义。本文主要讲意义和python里的使用,其实协方差矩阵有很强的实际意义和应用实例,有机会再补充。均值、方差和标准差给定一个含有n个样本的集合,可以得到样本的均值,方差和标准差。…

    2022年10月27日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号