使用busybox快速创建rootfs系统(硬件:atk-dl6y2c)

目录

概述

1 编译busybox

1.1 配置Makefile

1.2 需改参数

1.3 配置busybox

1.4 编译busybox

2 完善 rootfs下文件

2.1 rootfs 的“/lib”目录添加库文件

2.2 rootfs 的“usr/lib”目录添加库文件

2.3 创建其他目录

3 完善其他文件

3.1 完善etc/init.d/rcS

3.2 完善 /etc/fstab 文件

3.3 完善 /etc/inittab文件

4 打包rootfs


概述

本文主要介绍如何使用busybox工具创建rootfs系统,交叉编译器版本为:gcc-linaro-4.9.4-arm-linux-gnueabihf。笔者通过实操的方式介绍制作rootfs的全过程。并将每个文件中的要编写的内容罗列出来,方便使用其作为一个设计的模版。

1 编译busybox

从如下网址上获取busybox的源码包: https://busybox.net/downloads/

1.1 配置Makefile

解压busybox

tar -vxjf busybox-1.29.0.tar.bz2

在busybox-1.29.0/Makefile配置编译器信息:

源代码为:

CROSS_COMPILE ?=/home/ctools/gcc-linaro-4.9.4-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

配置架构信息:

1.2 需改参数

修改busybox 源码,取消 busybox 对中文显示的限制,打开文件 busybox-1.29.0/libbb/printable_string.c,找到函数 printable_string,函数内容如下:

修改位置-1:

修改位置-2:

修改位置-3:

在busybox-1.29.0/libbb/unicode.c文件中修改如下内容:

1.3 配置busybox

使用命令 make menuconfig 进行配置

配置选项-1:

-> Settings
     -> Build static binary (no shared libs)

配置选项-2:

-> Settings
       ->  vi-style line editing commands

配置选项-3:

-> Linux Module Utilities
     -> Simplified modutils

配置选项-4:

-> Linux System Utilities
    -> mdev (16 kb)

配置选项-5:

-> Settings
   -> Support Unicode
   -> Check $LC_ALL, $LC_CTYPE and $LANG environment variables

配置完成后,退出配置UI,保存配置

1.4 编译busybox

使用命令

make

然后install busybox

make install CONFIG_PREFIX=/home/mftang/linux_workspace/atk_dl6y2c_rootfs/rootfs

执行命令后, rootfs 目录下有 bin、 sbin 和 usr 这三个目录,以及 linuxrc 这个文件。前面说过 Linux 内核 init 进程最后会查找用户空间的 init 程序,找到以后就会运行这个用户空间的 init 程序,从内核态切换到用户态。如果 bootargs 设置 init=/linuxrc,那么 linuxrc 就是可以作为用户空间的 init 程序,所以用户态空间的 init 程序是 busybox 来生成的。至此,busybox 的工作就完成了,但是此时的根文件系统还不能使用,还需要一些其他的文件,下面还需要继续来完善 rootfs。

2 完善 rootfs下文件

2.1 rootfs 的“/lib”目录添加库文件

step-1: 在rootfs目录下创建lib目录,使用命令

mkdir lib

复制编译器目录下文件:/home/ctools/gcc-linaro-4.9.4-arm-linux-gnueabihf/arm-linux-gnueabihf/lib

step-2: 复制文件

将此目录下所有的so和.a文件都拷贝到 rootfs/lib 目录中, 拷贝命令如下:

cp *so* *.a /home/mftang/linux_workspace/atk_dl6y2c_rootfs/rootfs/lib -d

step-3: 删除软链接文件

删除文件后:

2.2 rootfs 的“usr/lib”目录添加库文件

在usr 目录下创建lib目录

/home/ctools/gcc-linaro-4.9.4-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib目录下文件copy到rootfs/usr/lib中。在/home/ctools/gcc-linaro-4.9.4-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib目录下使用命令:

cp *so* *.a /home/mftang/linux_workspace/atk_dl6y2c_rootfs/rootfs/usr/lib -d

2.3 创建其他目录

创建其他的一些文件夹,具体如下:

进入rootfs查看目录结构:

3 完善其他文件

3.1 完善etc/init.d/rcS

rcS 是个 shell 脚本, Linux 内核启动以后需要启动一些服务,而 rcS 就是规定启动哪些文件 的脚本文件。在 rootfs 中创建/etc/init.d/rcS 文件,然后在 rcS 中输入如下所示内容:

#!/bin/sh
​
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
​
runlevel=S
umask 022
export PATH LD_LIBRARY_PATH runlevel
​
#网络开机自启动设置
ifconfig eth0 up
​
#udhcpc -i eth0
ifconfig eth0 192.168.1.225 netmask 255.255.255.0
route add default gw 192.168.1.1
​
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
​
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
​
#添加开级自动运行的代码
在文件夹中的位置

3.2 完善 /etc/fstab 文件

在 rootfs 中创建/etc/fstab 文件, fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区,格式如下:

<file system> <mount point> <type> <options> <dump> <pass>

文件内容:

#<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

在文件夹中的位置

3.3 完善 /etc/inittab文件

inittab 的详细内容可以参考 busybox 下的文件 examples/inittab。 init 程序会读取/etc/inittab这个文件, inittab 由若干条指令组成。每条指令的结构都是一样的,由以“:”分隔的 4 个段组成,格式如下:

<id>:<runlevels>:<action>:<process>

文件内容:

#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

在文件夹中的位置:

4 打包rootfs

进入到 Ubuntu 中的rootfs 目录中,然后使用 tar 命令对其进行打包,命令如下:

tar -vcjf rootfs.tar.bz2 *

执行命令后,生成.bz2文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/673737.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

11.4 插入排序

目录 11.4 插入排序 11.4.1 算法流程 11.4.2 算法特性 11.4.3 插入排序的优势 11.4 插入排序 插入排序&#xff08;insertion sort&#xff09;是一种简单的排序算法&#xff0c;它的工作原理与手动整理一副牌的过程非常相似。 具体来说&#xff0c;我们在未排…

片上电控系统集成技术

一、背景 片上电机控制系统集成技术&#xff08;On-Chip Motor Control System Integration&#xff09;是一种先进的电子工程技术&#xff0c;它主要聚焦于将复杂的电机控制算法和硬件组件整合到单一集成电路&#xff08;IC&#xff09;中&#xff0c;以便于高效、精确地管理…

C基础-标准库下

上:http://t.csdnimg.cn/qj5uA 目录 七. math.h 八. setjmp.h 九. signal.h 十. stdarg.h 十一.stddef.h 十二. stdio.h 十三. stdlib. 十四. string.h 十五. time.h 七. math.h 定义了各种数学函数和一个宏。 宏和函数描述 序号宏 & 描述1HUGE_VAL 当函数的结…

C++11 lambda表达式和包装器

C11 lambda表达式和包装器 一.lambda表达式1.lambda表达式的引入2.基本语法和使用1.基本语法2.使用1.传值捕捉的错误之处2.传引用捕捉 3.lambda表达式的底层原理4.lambda的特殊之处5.lambda配合decltype的新玩法 二.function包装器1.概念2.包装函数1.包装普通函数2.包装成员函数…

【Oracle篇】rman全库异机恢复:从RAC环境到单机测试环境的转移(第四篇,总共八篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

odoo10 编写审批拒绝弹窗

前言 在日常中有很多审批场景&#xff0c;例如请销假。审批拒绝的时候应该给出原因&#xff0c;此时&#xff0c;在form界面点击拒绝的时候应该弹出输入窗口。如下图所示。 编写模型 模块的目录下&#xff0c;新建wizard文件夹&#xff0c;然后直接创建一个models.py和views.p…

idea实用快捷键(持续更新...)

文章目录 1、快速输入try/catch/finally2、选中多个光标3、实现接口4、方法参数提示5、查看某个类的子类6、弹出显示查找内容的搜索框 1、快速输入try/catch/finally CtrlAltT 2、选中多个光标 ShiftAlt单机多选 End可以全部到行尾&#xff0c;Home则可以全部回到行首 3、实现接…

MySQL 使用方法以及教程

一、引言 MySQL是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛应用于Web开发、数据分析等领域。它提供了高效、稳定的数据存储和查询功能。同时&#xff0c;Python作为一种强大的编程语言&#xff0c;也提供了多种与MySQL交互的库&#…

中国人工智能区域竞争力研究报告(2024)

来源&#xff1a;赛迪顾问 近期历史回顾&#xff1a;2024年NoETL开启自动化数据管理新时代白皮书.pdf 创新引领用户“换新生活”-从AWE2024看家电及消费电子行业发展趋势报告&#xff08;精简版&#xff09;.pdf 2024智能网联汽车“车路云一体化”规模建设与应用参考指南&#…

字节裁员!开启裁员新模式。。

最近&#xff0c;互联网圈不太平&#xff0c;裁员消息此起彼伏。而一向以“狼性文化”著称的字节跳动&#xff0c;却玩起了“低调裁员”&#xff0c;用一种近乎“温柔”的方式&#xff0c;慢慢挤掉“冗余”的员工。 “细水长流”&#xff1a;裁员新模式&#xff1f; 不同于以往…

FreeRTOS基础(九):FreeRTOS的列表和列表项

今天我们将探讨FreeRTOS中的一个核心概念——列表&#xff08;List&#xff09;和列表项&#xff08;List Item&#xff09;。在实时操作系统&#xff08;RTOS&#xff09;中&#xff0c;任务的管理和调度是至关重要的&#xff0c;而FreeRTOS使用列表来实现这一功能。列表可以说…

城市低空经济“链接力”指数报告(2024)

来源&#xff1a;城市进化论&火石创造 近期历史回顾&#xff1a;2024年NoETL开启自动化数据管理新时代白皮书.pdf 创新引领用户“换新生活”-从AWE2024看家电及消费电子行业发展趋势报告&#xff08;精简版&#xff09;.pdf 2024智能网联汽车“车路云一体化”规模建设与应用…

鬼刀画风扁平化粒子炫动引导页美化版

源码介绍 分享一款引导页,响应式布局&#xff0c;支持移动PC 添加背景图片&#xff0c;美化高斯模糊 &#xff0c;删除蒙版人物部分&#xff0c;更图片人物画风更美好 删除雪花特效 替换字体颜色 添加底备案号 预留友情连接 效果预览 源码下载 https://www.qqmu.com/3381.h…

总结2024/6/3

省流&#xff0c;蓝桥杯国优&#xff0c;还是太菜了&#xff0c;听说都是板子题但是还是写不出来&#xff0c;靠暴力好歹没有爆0&#xff0c;还是得多练&#xff0c;明年加油了

分享5款.NET开源免费的Redis客户端组件库

前言 今天大姚给大家分享5款.NET开源、免费的Redis客户端组件库&#xff0c;希望可以帮助到有需要的同学。 StackExchange.Redis StackExchange.Redis是一个基于.NET的高性能Redis客户端&#xff0c;提供了完整的Redis数据库功能支持&#xff0c;并且具有多节点支持、异步编…

Python中的元素相乘与矩阵相乘(附Demo)

目录 前言1. 元素相乘2. 矩阵相乘3. 差异 前言 深度学习的矩阵相乘引发的Bug&#xff0c;由此深刻学习这方面的相关知识 在Python中&#xff0c;特别是使用NumPy库时&#xff0c;元素相乘和矩阵相乘是处理数组和矩阵时的常见操作 1. 元素相乘 元素相乘是指对两个相同形状的…

Windows端口本地转发

参考 微软Netsh interface portproxy 命令 界面端口代理的 Netsh 命令 | Microsoft Learn 使用Windows系统的portproxy功能配置端口转发 使用Windows系统的portproxy功能配置端口转发-阿里云帮助中心 (aliyun.com) 将来自0.0.0.0地址对端口35623的访问转发到172.18.106.16…

Python中degrees怎么用

degrees() 函数可以将弧度转换为角度。 语法 以下是 degrees() 方法的语法&#xff1a; import math math.degrees(x) 注意&#xff1a;degrees() 是不能直接访问的&#xff0c;需要导入 math 模块&#xff0c;然后通过 math 静态对象调用该方法。 参数 x -- 一个数值。 返…

苹果设备mac/Paid/phone 下载使用anki记忆卡

安卓的设备直接可以下 如果你这个&#xff0c;如图。 首先点击下列网址&#xff0c;下载&#xff0c;在里面搜索anki记忆卡 https://www.i4.cn 下载好&#xff0c;打开应用软件爱思助手。搜索anki记忆卡&#xff0c;下载&#xff0c;然后用数据线一端连接电脑一端连接手机或者…

【C++练级之路】【Lv.23】C++11——可变参数模板、lambda表达式和函数包装器

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、可变参数模板1.1 参数包的概念1.2 参数包的展开1.3 emplace系列 二、lambda表达式2.1 lambda的格式2.2 捕…