使用busybox构建根文件系统

2023-05-16

目录

1 下载busybox

2 修改Makefile

3 配置busybox

4 编译安装

4.1 /usr/include/unistd.h:203: error: conflicting types for 'gid_t'

4.2 miscutils/seedrng.c:45:24: fatal error: sys/random.h: No such file or directory

4.3 Makefile:405: *** mixed implicit and normal rules: deprecated syntax

4.4 linux/netfilter.h:44: error: field 'in' has incomplete type

5  创建必要的文件夹

6 安装glibc库

7 构建etc目录

7.1 创建etc/inittab文件

7.2 创建etc/init.d/rcS文件

7.3 创建etc/fstab文件

8 构建dev目录

9 制作yaff2镜像

10 文件系统验证


1 下载busybox

去网址:https://busybox.net/downloads/

下载busybox源码,这里下载的1.36版本,然后解压

tar xvf busybox-1.36.0.tar.bz2
cd busybox-1.36.0/

2 修改Makefile

164行 CROSS_COMPILE ?=  改为:CROSS_COMPILE ?= arm-linux-

190行 ARCH ?= $(SUBARCH) 改为:ARCH ?= arm

3 配置busybox

make defconfig
make menuconfig

4 编译安装

make -j8
make CONFIG_PREFIX=../fs install

4.1 /usr/include/unistd.h:203: error: conflicting types for 'gid_t'

然后编译报下面的错误 

  CC      libbb/capability.o
In file included from include/platform.h:333,
                 from include/libbb.h:13,
                 from libbb/capability.c:18:
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/unistd.h:203: error: conflicting types for 'gid_t'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:27: error: previous declaration of 'gid_t' was here
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/unistd.h:208: error: conflicting types for 'uid_t'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:26: error: previous declaration of 'uid_t' was here
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/unistd.h:216: error: conflicting types for 'off_t'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:17: error: previous declaration of 'off_t' was here
In file included from include/libbb.h:16,
                 from libbb/capability.c:18:
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/dirent.h:37: error: conflicting types for 'ino_t'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:14: error: previous declaration of 'ino_t' was here
In file included from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/bits/fcntl.h:25,
                 from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/fcntl.h:34,
                 from include/libbb.h:18,
                 from libbb/capability.c:18:
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/sys/types.h:62: error: conflicting types for 'dev_t'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:13: error: previous declaration of 'dev_t' was here
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/sys/types.h:72: error: conflicting types for 'mode_t'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:15: error: previous declaration of 'mode_t' was here
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/sys/types.h:77: error: conflicting types for 'nlink_t'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:16: error: previous declaration of 'nlink_t' was here
In file included from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/sys/types.h:133,
                 from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/bits/fcntl.h:25,
                 from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/fcntl.h:34,
                 from include/libbb.h:18,
                 from libbb/capability.c:18:
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/time.h:105: error: conflicting types for 'timer_t'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:22: error: previous declaration of 'timer_t' was here
In file included from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/sys/types.h:220,
                 from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/bits/fcntl.h:25,
                 from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/fcntl.h:34,
                 from include/libbb.h:18,
                 from libbb/capability.c:18:
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/sys/select.h:78: error: conflicting types for 'fd_set'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:12: error: previous declaration of 'fd_set' was here
In file included from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/bits/fcntl.h:25,
                 from /usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/fcntl.h:34,
                 from include/libbb.h:18,
                 from libbb/capability.c:18:
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/sys/types.h:248: error: conflicting types for 'blkcnt_t'
/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/types.h:124: error: previous declaration of 'blkcnt_t' was here
scripts/Makefile.build:197: recipe for target 'libbb/capability.o' failed
make[1]: *** [libbb/capability.o] Error 1
Makefile:744: recipe for target 'libbb' failed
make: *** [libbb] Error 2

conflicting types for 'dev_t'的原因_小饼仙子的博客-CSDN博客

我看了下这篇博客,然后我这样修改

 没用还是有错误。继续搜,看到

3.5.3内核编译出错~求救【linux吧】_百度贴吧

那更换成4.9.4的交叉编译工具链吧

4.2 miscutils/seedrng.c:45:24: fatal error: sys/random.h: No such file or directory

换成4.9.4的交叉编译工具后,编译报下面的错误

miscutils/seedrng.c:45:24: fatal error: sys/random.h: No such file or directory
 #include <sys/random.h>
                        ^
compilation terminated.
scripts/Makefile.build:197: recipe for target 'miscutils/seedrng.o' failed
make[1]: *** [miscutils/seedrng.o] Error 1
Makefile:746: recipe for target 'miscutils' failed
make: *** [miscutils] Error 2

网上继续搜,看到

嵌入式开发六:busybox编译根文件系统的一些错误解决办法_busybox编译报错miscutils/seedrng.c:45:24: fatal error:_zhubenfulovepoem的博客-CSDN博客

上面说

进入make menuconfig:
在   Miscellaneous Utilities ---> 
[ ] taskset 
将其前的星号去掉即可。

但是我在   Miscellaneous Utilities中没找到tasknet,于是搜索了下,发现它在Linux System Utilities中。

 但是发现问题未解决,于是继续找,搜到了类似的

那应该还是交叉编译工具链的版本太低,我去看了下我交叉编译工具链里面的libc库,是2.19版本的。 

这时候我不再更换交叉编译工具链版本了,因为我用的开发板芯片太老,用新的交叉编译工具链可能还会有其他稀奇古怪的错误,所以这里我反向操作,不升级交叉编译工具链的版本而是降低busybox的版本,这里用busy1.7.0版本,并且交叉编译工具链用回4.3.2。

4.3 Makefile:405: *** mixed implicit and normal rules: deprecated syntax

编译报下面的错误

Makefile:405: *** mixed implicit and normal rules: deprecated syntax
Makefile:1242: *** mixed implicit and normal rules: deprecated syntax
make: *** No rule to make target 'defconfig'.  Stop.

解决方法在下面的博客 

编译busybox-1.7.0出现Makefile:405:*** mixed implicit and normal rules: deprecated syntax_骑着蜗牛写代码的博客-CSDN博客

4.4 linux/netfilter.h:44: error: field 'in' has incomplete type

继续编译又报下面的错误

linux/netfilter.h:44: error: field 'in' has incomplete type

解决方法

在 .../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h 的开头
添加缺少的头文件:
#include <netinet/in.h>

然后编译不再报错,然后安装安装

make CONFIG_PREFIX=../fs/ install

可以在fs下面看到生成的文件和目录

 5  创建必要的文件夹

 到fs目录下,执行下面的命令

mkdir dev etc lib mnt proc sys tmp var

6 安装glibc库

这里直接把交叉编译工具链路径下的库拷贝到上面创建的lib文件夹中。

在交叉编译工具链的位置里面用下面的命令搜索

由于ARM9属于ARMv4T架构,所以拷贝上面第三个第四个lib到fs文件夹里面

mkdir lib
mkdir usr/lib
cp -drf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*.so* ./lib/
cp -drf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*.so* ./usr/lib/

 上面拷贝的时候要注意,后面是*.so*,有两个星号,不是*.so。

7 构建etc目录

etc目录下的内容取决于要运行的程序,本节只需要创建3个文件:etc/inittab, etc/init.d/rcS, etc/fstab。

7.1 创建etc/inittab文件

我们在etc目录下创建inittab文件,文件内容如下

7.2 创建etc/init.d/rcS文件

这是一个脚本文件,可以在里面添加想自动执行的命令,以下命令配置IP地址、挂接/etc/fstab指定的文件系统。

  • 第一行表示这是一个脚本文件,运行时使用/bin/sh解析。
  • 第二行用来配置IP地址。
  • 第三行挂接/etc/fstab文件指定的所有文件系统。

创建完成后改变它的属性,

chmod +x rcS

7.3 创建etc/fstab文件

内容如下,表示执行mount -a命令后将挂载proc、tmpfs文件系统。

 8 构建dev目录

cd dev
sudo mknod console c 5 1
sudo mknod null c 1 3
sudo mknod ttySAC0 c 204 64
sudo mknod mtdblock0 b 31 0
sudo mknod mtdblock1 b 31 1
sudo mknod mtdblock2 b 31 2

执行完之后

9 制作yaff2镜像

这里不自己编译makeyaffe工具了,直接用韦老师的工具mkyaffs2image。

./mkyaffs2image fs/ fs_chw.yaffs

10 文件系统验证

把制作完成的文件系统下载到开发板中,发现报下面的错误

 可能是rcS脚本写错了,去看一下

 但是我看上面的笔记,当初是有i的,不知怎么成了fconfig了,

改完重新制作镜像文件,然后下载到板子上,这时候可以看到文件系统了。

参考文献

使用 busyBox 构建 linux 根文件系统_busybox制作linux_砌墙师傅的博客-CSDN博客

【ARM】使用Busybox构建根文件系统_busybox 制作根文件系统_凉开水白菜的博客-CSDN博客

Part6: 构建根文件系统(在s3c2440开发板演示)_韦东山 s3c2440 文件系统_ZMK_02的博客-CSDN博客

S3C2440 制作最新busybox文件系统

conflicting types for 'dev_t'的原因_小饼仙子的博客-CSDN博客

嵌入式开发六:busybox编译根文件系统的一些错误解决办法_busybox编译报错miscutils/seedrng.c:45:24: fatal error:_zhubenfulovepoem的博客-CSDN博客

https://www.cnblogs.com/electronic/p/11146614.html

S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统_busybox构建s3c2440根文件系统_嵌入式与Linux那些事的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用busybox构建根文件系统 的相关文章

随机推荐

  • 使用pytorch分布式进行训练的时候发生的错误

    在进行分布式训练的时候遇到这个错 xff0c 不知道怎么解决 xff0c 先记录一下 Traceback span class token punctuation span most recent call last span class
  • Linux驱动开发基础_在设备树中指定中断以及在代码中获得中断

    目录 1 设备树里中断节点的语法 1 1 设备树里的中断控制器 1 2 设备树里使用中断 2 设备树里中断节点的示例 3 在代码中获得中断 3 1 对于 platform device 3 2 对于 I2C 设备 SPI 设备 3 3 调用
  • Linux驱动开发基础__休眠与唤醒

    目录 1 适用场景 2 内核函数 2 1 休眠函数 2 2 唤醒函数 3 驱动框架 4 编程 4 1 gpio key drv c 4 2 button test c 4 3 Makefile 1 适用场景 在前面引入中断时 xff0c 我
  • Hive ddl语法使用详解

    一 前言 使用过关系型数据库mysql的同学对mysql的ddl语法应该不陌生 xff0c 使用ddl语言来创建数据库中的表 索引 视图 存储过程 触发器等 xff0c hive中也提供了类似ddl的语法 本篇将详细讲述hive中ddl的使
  • Linux驱动开发基础__POLL机制

    目录 1 适用场景 2 POLL机制的内核代码详解 2 1 sys poll 函数 2 2 do sys poll 函数 2 3 do poll函数 3 poll机制使用流程 4 驱动编程 5 应用编程 6 代码 6 1 gpio key
  • Linux驱动开发基础__异步通知

    目录 1 适用场景 2 使用流程 3 驱动编程 4 应用编程 5 代码 5 1 gpio key drv c 5 2 button test c 5 3 Makefile 6 异步通知机制内核代码详解 1 适用场景 在前面引入中断时 xff
  • Linux驱动开发基础__阻塞与非阻塞

    目录 1 引入 2 应用编程 3 驱动编程 4 代码 4 1 gpio key drv c 4 2 button test c 1 引入 所谓阻塞 xff0c 就是等待某件事情发生 比如调用 read 读取按键时 xff0c 如果没有按键数
  • Linux驱动开发基础__定时器

    目录 1 内核函数 2 定时器时间单位 3 使用定时器处理按键抖动 4 编程 4 1 gpio key drv c 4 2 button test c 4 3 Makefile 1 内核函数 所谓定时器 xff0c 就是闹钟 xff0c 时
  • Linux驱动开发基础__中断下半部tasklet

    目录 1 引入 2 内核函数 2 1 定义tasklet 2 2 使能 禁止 tasklet 2 3 调度tasklet 2 4 kill tasklet 3 tasklet 使用方法 4 tasklet 内部机制 5 代码 5 1 gpi
  • Linux驱动开发基础__工作队列

    目录 1 引入 2 内核函数 2 1 定义work 2 2 使用 work xff1a schedule work 2 3 其他函数 3 代码 3 1 gpio key drv c 3 2 button test c 4 内部机制 4 1
  • Linux驱动开发基础__中断的线程化处理

    目录 1 引入 2 内核机制 2 1 调用 request threaded irq 后内核的数据结构 2 2 request threaded irq 2 3 中断的执行过程 1 引入 复杂 耗时的事情 xff0c 尽量使用内核线程来处理
  • Linux驱动开发基础__mmap

    目录 1 引入 2 内存映射现象与数据结构 3 ARM 架构内存映射简介 3 1 一级页表映射过程 3 2 二级页表映射过程 4 怎么给 APP 新建一块内存映射 4 1 mmap 调用过程 编辑4 2 cache 和 buffer 4 3
  • 利用python批量下载百度图片

    某项目中需要训练高速火灾算法 但是手头没有数据集 因此需要利用python从网上下载图片 代码如下 coding utf8 import requests import json from urllib import parse impor
  • python将标注平台的数据格式转换成yolov5的txt格式

    标注平台得到的数据格式如下 annotation object bndbox xmax 1917 xmin 9 ymax 1037 ymin 474 groupid name 轻度雾气 size height 1080 width 1920
  • linux vnc常见命令

    linux vnc virtual network computing 1 新建一个vncserver xff1a 直接输入vncserver即可 xff0c 系统将从1开始计算桌面数 xff0c 当然也可以指定桌面的编号 xff0c 如
  • uboot,内核,根文件系统的启动过程

    复习了下uboot xff0c 内核 xff0c 根文件系统 xff0c 简单概括下三者的主要内容 1 uboot uboot的目的 xff1a 启动内核 uboot的功能可以分为两个阶段任务 1 2 1 uboot第一阶段 uboot第一
  • S3C2440开发环境搭建以及过程中遇到的问题

    拿出了之前的S3C2440开发板 xff0c 然后把移植uboot 移植内核 制作根文件系统 设备树编写驱动等几项再做一遍 xff0c 这篇文章先记录下环境搭建过程 xff0c 以及先把现成的uboot 内核 根文件系统下载进去 xff0c
  • S3C2440移植Linux4.19.275内核以及过程中遇到的问题

    目录 1 问题一 xff1a 内核移植时MTD分区问题 2 问题二 xff1a uboot的MTDPARTS DEFAULT定义的MTD分区 xff0c bootargs中的文件系统分区 xff0c 内核的mtd partition smd
  • 深度学习算法训练和部署流程介绍--让初学者一篇文章理解算法训练和部署流程

    目录 1 什么是深度学习算法 2 算法训练 2 1 训练的原理 2 2 名词解释 3 算法C 43 43 部署 3 1 嵌入式终端板子部署 3 3 1 tpu npu推理 3 3 2 cpu推理 3 2 服务器部署 3 2 1 智能推理 3
  • 使用busybox构建根文件系统

    目录 1 下载busybox 2 修改Makefile 3 配置busybox 4 编译安装 4 1 usr include unistd h 203 error conflicting types for 39 gid t 39 4 2