zoukankan      html  css  js  c++  java
  • 嵌入式linux与物联网进阶之路三:根文件系统制作

    承接前篇,我们的linux内核终于制作好了,也顺利的加载起来了,但是由于没有根文件系统,所以说加载到最后,是无法进入系统的。而本节内容则是讲解如何来制作根文件系统的。

    BuildRoot创建根文件系统

    由于BuildRoot工具可以构建linux的根文件系统,而且其配置项内部集成了很多我们常用的工具,所以今天它就是我们的主角。在开始之前,我们需要确保机器上安装了编译所需要的的依赖,如下:

    apt-get install linux-headers-$(uname -r)
    

    此命令可以检测我们机器上缺少的一些依赖,当然,在编译过程中,我们肯定还需要安装一些其他的依赖,到时候在编译过程中,出现什么依赖错误,我们就利用apt install命令安装缺少的组件就行了。

    之后开始下载我们的BuildRoot组件:

    wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz
    tar xvf buildroot-2017.08.tar.gz
    cd buildroot-2017.08/
    make menuconfig

    menuconfig配置

    打开menuconfig后,我们可以看到本次编译需要设置的选项,都列在这里了,针对以下几个选项,我们可以进行设置以下,画框的部分需要注意:

    Target options选项:

    Tool chain选项,使用内置交叉编译链,出问题概率小:

    System configuration配置如下,注意设置密码:

     

    其他的就没什么了,大家可以翻阅其他选项,安装一些自己需要安装的组件即可。

    make编译

    保存menuconfig之后,在根目录位置输入如下命令开始制作:

    make
    

    需要提醒的是,整个构建过程非常长,大概需要2小时的样子,而且在编译过程中,需要下载很多组件,这里有一些常用的组件列表,我们把其解压到BuildRoot根目录下的dl目录中,由于在编译过程中,linux内核等也需要下载,但是下载地址非常慢:

    https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.12.10.tar.xz
    https://downloads.uclibc-ng.org/releases/1.0.26/uClibc-ng-1.0.26.tar.xz
    

    一个是linux内核文件,一个是依赖包,我们可以用迅雷等工具下载好,然后把下载好的包也放到dl目录即可。就可以免去编译的时候下载耗费的时间了。

    在编译过程中,一般会遇到如下问题:

    Please port gnulib freadahead.c to your platform! 问题
    

    此问题目前已经有解决方法了,可以点击这里查看,具体解决方案就是,按照图示进入进入buildroot/output/build/host-m4.1.4.17文件夹,然后执行如下命令即可:

    sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
    echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
    

    而其他一些问题,基本上都是组件缺少的问题,利用apt install命令可以搞定。

    漫长的等待之后,到这个界面,就说明编译成功了:

    我们此时可以进入output/images目录中,就可以看到rootfs.tar文件在那里了。

    文件烧写

    由于之前我们只做好了第二分区,也就是/dev/sdb2,此时我们就可以将我们的根文件系统烧写进我们的tf卡了。

    插上我们的usb读卡器,由于sdb2没法直接访问,所以我们需要挂载,整体需要执行如下命令:

    sudo mkdir /mnt/sdb2                 //创建一个临时目录
    sudo mount /dev/sdb2 /mnt/sdb2       //将sdb2挂载到此临时目录
    sudo cp rootfs.tar /mnt/sdb2         //拷贝到sdb2中,此时sdb2中已经能看到跟文件
    sudo tar -xf rootfs.tar              //进入目录并解压
    sudo rm rootfs.tar                   //删掉tar
    sudo sync
    sudo umount /dev/sdb2
    

    这样,重新插拔一次usb读卡器,我们就可以看到文件拷贝进来了。

    然后将卡插回荔枝派nano,连接电脑,打开minicom,可以看到串口输出信息如下:

    参考资料:

    根文件系统编译 — 荔枝派Nano 全流程指南 documentation (lichee.pro)

  • 相关阅读:
    csrf攻击实例
    《四 数据库连接池源码》手写数据库连接池
    《四 spring源码》手写springmvc
    spring和springmvc是单例还是多例
    redis集群设置密码
    mongodb3.6集群搭建:分片集群认证
    mongodb3.6集群搭建:分片+副本集
    Mongo 3.6.1版本Sharding集群配置
    windows计划任务
    Redis slowlog慢查询
  • 原文地址:https://www.cnblogs.com/scy251147/p/14877155.html
Copyright © 2011-2022 走看看