利用busybox制作根文件系统---参考朱有鹏嵌入式视屏(上)

简介: 利用busybox制作根文件系统---参考朱有鹏嵌入式视屏

零、在windows底下下载 busybox,并将其弄到WinShare目录下,再通过windshare将其复制到Ubuntu目录下,/root/porting_x210/rootfs/aston_rootfs,解压,打开。

1、 Makefile 修改

(1) ARCH = arm

(2) CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

一、打开busybox-1.24.1,在顶层文件下make menuconfig,做如下配置

1、make menuconfig配置

Busybox Settings--->

      Build Options--->

             [*]Build BusyBox as a static binary(no shared libs)

 

Busybox settings--->        

      Busybox Library Tuning--->

      [*]vi-style line editing commands

      [*]Fancy shell prompts

     

     

Linux Module Utilities--->

      [ ]Simplified modutils

      [*]insmod

      [*]rmmod

      [*]lsmod

      [*]modprobe

      [*]depmod

 

     

Linux System Utilities--->

[*]mdev

      [*]Support /etc/mdev.conf

      [*]Support subdirs/symlinks

      [*]Support regular expressions substitutions when renaming dev

      [*]Support command execution at device addition/removal

      [*]Support loading of firmwares

配置完成之后保存退出。

2、直接make编译, 编译之后出错

编译出错,提示 sync.c 文件中有个变量没有定义,那个怎么解决呢?这里的解决方法是跳过sync.c 文件,不编译、不链接。

(1)、 首先找到 sync.c 文件,执行命令【find –name “sync.c”】,可以看到 sync.c 文件在

【./coreutils/sync.c】

(2)、在当前路径下打开 coreutils,然后 ls,查看当前目录中确实有 sync.c 文件,但是这个目录中没有 Makefile 文件,这里用 Kbuild 文件替代了 Makefile,找到 sync.o 文件。

(3)、到顶层目录,执行【make menuconfig】,用【/ 】查找 sync 的配置路径,可以看到 sync

在 coreutils 下。将 sync 配置为【n】

(4)、重新 make 编译,在顶层目录下 ls,可以看到 busybox 则证明编译通过。

二、编译通过之后,安装

1、执行【make install】去安装 busybox

默认的安装路径是顶层目录下,新建一个_install 的目录去安装

在 make menuconfig 窗口中查看,

Busybox Settings

Installation Options(“make install” behavior)

(./_install)Busybox installation prefix

2、修改安装路径

Busybox Settings

Installation Options(“make install” behavior)

(./_install)Busybox installation prefix

在弹出的窗口将默认的路径删除,添加我自己想要安装的根文件的路径。这里输入路径为:/root/porting_x210/rootfs/rootfs

然后make install,到/root/porting_x210/rootfs/rootfs下查看

三、检验我们创建的linuxrc是否可以用

1、设置bootargs挂载添加busybox移植的rootfs

注意uboot的bootargs设置成:

setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off  init=/linuxrc console=ttySAC2,115200

2、实验结果:挂载成功,执行/linuxrc(也就是busybox)成功,但是因为找不到/etc/init.d/rcS和/dev/tty2等文件所以一直在打印错误提示信息,但是其实有进入命令行。

3、实际效果是这样的

 

要注意的细节:

1nfs要配置正确,包括导出的路径,以及所导出路径的文件夹的权限(777

2)网卡的设置,要能ping 通开发板

 

四、创建配置文件inittab文件(对应课程2.19.3)

1、进入/root/porting_x210/rootfs/rootfs,执行【mkdir etc】,进入etc目录,将inittab文件拷贝到etc目录下。

2、打开开发板,不按回车,让开发板自己启动。(bootcmd,bootargs参数都不要修改),可以看到效果是这样的。

3、此时按ENTER进入控制台,发现所有的Linux命令(ls pwd touch)都可以运行了。

  此时在SecureCRT中执行【touch a.c】,再到Linux中去看,发现有一个a.c文件,为什么会这样呢?

  因为开发板是远程挂载Linux的根文件系统,所以在SecureCRT中操作,就相当于在Linux中操作。

 

 

这里所有的下载都是,开发板中只有uboot,然后通过tftp命令去Ubuntu/tftp目录下下载zImage文件,然后通过nfs命令去加载/root/porting_x210/rootfs/rootfs目录中的根文件系统。bootcmdbootargs的参数设置如下:

bootargs=root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200

 

bootcmd=tftp 0x30008000 zImage; bootm 0x30008000

 

到第五步之后,由于每次都通过网线去远程下载zImage,太麻烦了,所以将zImage直接通过fastboot拷贝到开发板中。

此时bootargs不用改,但是bootcmd参数要改,bootcmd参数如下:

bootcmd=movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000 30B00000

 

五、在busybox中添加rcS文件(上一步报错就是找不到rcS文件)

1、进入/root/porting_x210/rootfs/rootfs/etc,执行【mkdir init.d】,将朱老师的rcS文件拷贝到这个目录下。

此时再去开机,看到的效果是这样的。

但是事实上我们刚才已经将rcS文件拷贝到init.d文件夹中了。在SecureCRT中打开rcS文件可以看到,rcS文件的末尾每一行都多了一个^M符号,这是由于windows下的换行符与Linux中的换行符不一样造成的。将行末的^M符号删掉即可。

2、再次开机,可以看到截图的情形。

复制fstab文件到etc目录下,再次开机,可以看到

什么原因?

因为根文件系统中找不到挂载点,所以挂载出错。

3、解决挂载错误的方法

打开fstab文件,可以看到

解决方案就是自己在制作的/root/porting_x210/rootfs/rootfs/根目录下创建这些挂载点【就是fstab文件中的mount point】目录即可。创建fstab中要挂载的目录,执行【mkdir proc sys tmp var dev】

目录
相关文章
|
10月前
|
存储 Ubuntu Shell
利用busybox制作根文件系统---参考朱有鹏嵌入式视屏(下)
利用busybox制作根文件系统---参考朱有鹏嵌入式视屏(下)
184 0
|
9天前
|
Ubuntu Linux Shell
Linux(26) 根据现成rootfs.img制作1:1还原源代码定制实现
Linux(26) 根据现成rootfs.img制作1:1还原源代码定制实现
7 1
|
16天前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
|
29天前
|
存储 Ubuntu Linux
制作一个嵌入式Linux的应用程序升级文件
制作一个嵌入式Linux的应用程序升级文件
12 2
|
存储 编解码 Kubernetes
影片自由,丝滑流畅,Docker容器基于WebDav协议通过Alist挂载(百度网盘/阿里云盘)Python3.10接入
使用过NAS(Network Attached Storage)的朋友都知道,它可以通过局域网将本地硬盘转换为局域网内的“网盘”,简单理解就是搭建自己的“私有云”,但是硬件和网络成本都太高了,有点可望而不可及的意思。Alist开源库则可以满足我们,它能将公共网盘反过来变成一种联网的本地硬盘,使用Web页面来统一挂载和管理,网盘类型包含但不限于:百度网盘、阿里云盘、迅雷网盘等等。
影片自由,丝滑流畅,Docker容器基于WebDav协议通过Alist挂载(百度网盘/阿里云盘)Python3.10接入
|
计算机视觉
从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录三:使用USB相机运行ORBSLAM
从零开始Ubuntu16.04+ORBSLAM2+ROS实验实录三:使用USB相机运行ORBSLAM
402 0
|
Linux Apache Windows
Linux 制作系统镜像
Linux 制作系统镜像
Linux 制作系统镜像
|
Linux Windows
rufus:一款制作linux U盘启动的神器
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396660 https://rufus.akeo.ie/windows下直接双击使用,快捷便利,直接选择iso镜像文件即可,全自动完成,不需要担心对U盘的损伤,也不用担心安装的时候提示找不到引导文件。
1606 0
|
Linux Shell 芯片