Linux根文件系统移植

news2024/9/20 20:33:54

目录

一、根文件系统

1.1根文件系统

1.2根文件系统内容

二、根文件系统移植

2.1BusyBox

2.2BusyBox的获取

2.3BusyBox的使用

2.4make menuconfig

2.5编译和安装 

2.6修改根文件系统


一、根文件系统

1.1根文件系统

    根文件系统是内核启动后挂载的第一个文件系统系统引导程序会在根文件系统挂载后从中把一些基本的初始化脚本和服务等加载到内存中去运行

1.2根文件系统内容

bin  shell命令(elf格式)(通过busybox编译生成)

 都是二进制文件,所以需要区分架构。

ubuntu下浅蓝色的都是软连接文件,

他们都来自busybox。busybox可以理解成这些命令的源代码

dev  设备文件(内核启动后会将设备信息写入该目录)
etc  内核配置文件

lib  共享库(elf格式)(从交叉编译工具链中获取)

为什么要有库呢,因为程序的执行需要动态库。不然链接动态库的应用程序不能再开发板上跑。而我们使用交叉编译的方式编辑和编译程序再ubuntu上。所以开发板不需要有静态库。这些库是怎么来的呢,首先ubuntu的库我们肯定用不了。他们都是x86架构的。不过交叉编译工具链里有库。我们把这里.so结尾的也就是动态库复制过来 

linuxrc  内核运行的第一个应用程序(通过busybox编译生成)

1、/linuxrc是一个可执行的应用程序

(1)/linuxrc是应用层的,和内核源码一点关系都没有

(2)/linuxrc在开发板当前内核系统下是可执行的。因此在ARM SoC的linux系统下,这个应用程序就是用arm-linux-gcc编译链接的;如果是在PC机linux系统下,那么这个程序就是用gcc编译连接的。

(3)/linuxrc如果是静态编译连接的那么直接可以运行;如果是动态编译连接的那么我们还必须给他提供必要的库文件才能运行。但是因为我们/linuxrc这个程序是由内核直接调用执行的,因此用户没有机会去导出库文件的路径,因此实际上这个/linuxrc没法动态连接,一般都是静态连接的。

2、/linuxrc执行时引出用户界面

(1)操作系统启动后在一系列的自己运行配置之后,最终会给用户一个操作界面(也许是cmdline,也许是GUI),这个用户操作界面就是由/linuxrc带出来的。

(2)用户界面等很多事并不是在/linuxrc程序中负责的,用户界面有自己专门的应用程序,但是用户界面的应用程序是直接或者间接的被/linuxrc调用执行的。用户界面程序和其他的应用程序就是进程2、3、4·····,这就是我们说的进程1(init进程,也就是/linuxrc)是其他所有应用程序进程的祖宗进程。

3、/linuxrc负责系统启动后的配置

(1)就好像一个房子建好之后不能直接住,还要装修一样;操作系统启动起来后也不能直接用,要配置下。

(2)操作系统启动后的应用层的配置(一般叫运行时配置,英文简写etc)是为了让我们的操作系统用起来更方便,更适合我个人的爱好或者实用性。

4、/linuxrc在嵌入式linux中一般就是busybox

(1)busybox是一个C语言写出来的项目,里面包含了很多.c文件和.h文件。这个项目可以被配置编译成各个平台下面可以运行的应用程序。我们如果用arm-linux-gcc来编译busybox就会得到一个可以在我们开发板linux内核上运行的应用程序。

(2)busybox这个程序开发出来就是为了在嵌入式环境下构建rootfs使用的,也就是说他就是专门开发的init进程应用程序。

(3)busybox为当前系统提供了一整套的shell命令程序集。譬如vi、cd、mkdir、ls等。在桌面版的linux发行版(譬如ubuntu、redhat、centOS等)中vi、cd、ls等都是一个一个的单独的应用程序。但是在嵌入式linux中,为了省事我们把vi、cd等所有常用的shell命令集合到一起构成了一个shell命令包,起名叫busybox。

了解linux的进程:rootfs与linuxrc | 《Linux就该这么学》

mnt  挂载目录(非必要)
proc  进程相关文件(内核启动后会将进程信息写入该目录)
root  超级用户家目录(非必要)
sbin     系统管理shell命令(elf格式)(通过busybox编译生成)

 他们也来自busybox

sys  驱动相关文件(内核启动后会将驱动信息写入该目录)
比如插入u盘就会将u盘的驱动写进去
usr  shell命令(elf格式)(通过busybox编译生成)

 (没有详细介绍的目前都是空的)

(windows是文件属于磁盘,Linux是磁盘属于文件。所以插入一个u盘的话要挂载到某个目录下)

二、根文件系统移植

2.1BusyBox

    BusyBox将很多常用的工具集成到一个很小的可执行文件中,为普通用户提供大多数常用的命令,BusyBox实现的命令都是精简版的,很多扩展都不支持。BusyBox被称为Linux工具里的瑞士军刀

他很轻量级,以至于很多命令的拓展都不支持

2.2BusyBox的获取

    https://busybox.net/downloads/

他的更新不像Linux和uboot那样活跃(很忙的盒子)

2.3BusyBox的使用

 tar -xvf busybox-1.22.1.tar.bz2 

他怎么安装的说明在INSTALL文件里

他说他的编译过程和Linux内核很像

2.4make menuconfig

 其实保持原有配置就可以了,以后也不太需要自己编译根文件系统

但是要指定一下编译器

选择编译成静态库,然后把最大文件支持位两个G取消

 

指定编译器

 这个没有保存一直退出会询问你是否保存

2.5编译和安装 

make

make install

 

这个没瘦身

 这个文件就是根据上面文件瘦身得来的

make install

这个命令生成了一堆软连接

这时候生成了一个新的文件

2.6修改根文件系统

 cp ~/Linux_4412/toolchain/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/ . -a

 

sudo rm lib/*.a 

 删除所有的静态库

sudo su
/home/book/Linux_4412/toolchain/gcc-4.6.4/bin/arm-none-linux-gnueabi-strip lib/*
exit 

因为瘦身需要的权限比较大所以其换成rootu用户

又因为交叉编译工具链安在了book用户下所以想要使用只能指定路径

瘦身后退出

chmod +x etc/init.d/rcS 

为这个脚本添加可执行权限

mkdir dev mnt proc root sys tmp var

sudo rm -rf *

把原来的删了

cp -rf ~/Linux_4412/busybox/busybox-1.22.1/_install/* .

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Homekit智能家居创意DIY一智能灯

一、什么是智能灯 传统的灯泡是通过手动打开和关闭开关来工作。有时,它们可以通过声控、触控、红外等方式进行控制,或者带有调光开关,让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块,可与手机、家庭智能助手、或其他智能…

链表题目总结 -- 递归

目录一. 递归反转整个链表1. 思路简述2. 代码3. 总结二. 反转链表前 N 个节点1. 思路简述2. 代码3. 总结三、反转链表的一部分1. 思路简述2. 代码3.总结四、反转链表后N个节点1. 思路简述2. 代码3.总结一. 递归反转整个链表 题目链接:https://leetcode.cn/problems…

部署智能合约到公链

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

【面试】生命周期详情解释及案例

目录 1.什么是生命周期 2.生命周期函数 3.vue2中生命周期的函数 4.生命周期的阶段 5.生命周期图示 第一个阶段:组件创建阶段 第二个阶段:编译HTML模板并渲染到浏览器中 第三阶段:组件更新阶段 第四阶段:组件销毁阶段 1.什…

【数据结构】基础:图的基本概念与实现(附C++源代码)

【数据结构】基础:图的基本概念与实现(附C源代码) 摘要:将会在数据结构专题中开展关于图论的内容介绍,其中包括四部分,分别为图的概念与实现、图的遍历、图的最小生成树以及图的最短路径问题。本文将介绍图…

遗传算法(Genetic Algorithm,GA)实现数据排序,python

遗传算法(Genetic Algorithm,GA)实现数据排序,python 遗传算法是一种比较广泛、通用的算法体系,为了说明遗传算法的原理和实现,现在用GA解决一个计算机科学最基本、最古老的问题:排序问题。 需要特别说明的是,遗传算…

【GPLT 三阶题目集】L3-016 二叉搜索树的结构

二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分…

代码随想录LeetCode | 单调栈问题

前沿:撰写博客的目的是为了再刷时回顾和进一步完善,其次才是以教为学,所以如果有些博客写的较简陋,是为了保持进度不得已而为之,还请大家多多见谅。 预:看到题目后的思路和实现的代码。 见:参考…

两种特征提取方法与深度学习方法对比的小型金属物体分类分析研究

本文讨论了用于对包括螺丝、螺母、钥匙和硬币在内的小型金属物体进行分类的两种特征提取方法的效率:定向梯度直方图 (HOG) 和局部二进制模式 (LBP)。首先提取标记图像的所需特征并以特征矩阵的形式保存。使用三种不同的分类方法(非参数 K 最近邻算法、支…

云计算|OpenStack|社区版OpenStack(实务操作---cloud-init的使用)

前言: 接上一篇文章:https://zskjohn.blog.csdn.net/article/details/128931042 我们可以从官方获取到现成的镜像,例如,从Ubuntu 18.04 LTS (Bionic Beaver) Daily Build [20230210]官方下载的bionic-server-cloudimg-amd64.img…

春招Leetcode刷题日记-D2-贪心算法-区间问题

D2-贪心算法-区间问题力扣435. 无重叠区间思路代码力扣435. 无重叠区间 题目链接:435. 无重叠区间 思路 1、贪心策略: 1、题目中,给了若干个区间,现在,我想留下尽可能多的,不重叠的区间 2、考虑&#…

Git配置多仓库账户密码

前言说明: 由于我们在工作中可能会遇到公司是用的gitlab仓库,代码下载需要github仓库,自己的项目需要gitee仓库,如何在同一台电电脑配置多个仓库账户密码就尤为重要。 (一) 配置流程 这里是在windows电脑上配置多仓库以github为例…

使用Spring框架的好处是什么

使用Spring框架的好处是什么? 1、轻量:Spring 是轻量的,基本的版本大约2MB。 2、控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。 3、面向切面的编程(AOP…

JCIM|Chemistry42:一个人工智能驱动的分子设计和优化平台

题目:Chemistry42: An AI-Driven Platform for Molecular Design and Optimization 文献来源:https://doi.org/10.1021/acs.jcim.2c01191 代码:https://insilico.com/pipeline (平台网址) 1.背景介绍 Chemistry42是Insilico Medicine提出…

Git_合并多次提交记录

Git_合并多次提交记录 前言:使用git rebase将多条提交记录合并成一条 应用场景:公司代码分支在master上,张三接到一个开发任务,需要在master上开发一个新功能,首先张三不能直接使用master分支进行开发,因为…

论文阅读:GeoAug: Data Augmentation for Few-Shot NeRF with Geometry Constrain

中文标题:使用几何约束增强小样本神经辐射场 提出的问题 NeRF尽管简介有效,但是往往不能收敛到正确的几何结构。这个问题在小样本学习中尤为明显,往往在没有足够训练数据的情况下,很难使得MLP网络学习到正确的几何的隐表示&#…

Solon Java Framework 2.1.2 发布。简单!高效!国产!

Solon 是一个高效的 Java 应用开发框架:更快、更小、更简单。它不是 Spring,没有用 Servlet,也无关 JavaEE;它也是一个新兴独立的开放生态。主框架仅 0.1 MB。 150来个生态插件,覆盖各种不同的应用开发场景&#xff1…

Linux Capabilities 入门

目录 Linux capabilities 是什么? capabilities 的赋予和继承 线程的 capabilities Permitted Effective Inheritable Bounding Ambient 文件的 capabilities Permitted Inheritable Effective 运行 execve() 后 capabilities 的变化 案例 Linux capab…

黑马】后台管理183-

一、添加时间线组件时间线组件在element2.6.0的版本中才可以找到项目中用到的插件早于时间线插件发布的,所以需要用到素材中的,timeline 和timeline-item复制到\code\shop-hou\src\plugins\1,在element.js中导入timeline等组件import Timeline from ./ti…

20230213在AIO-3568J开发板在原厂Android12下跑通ap6275s

20230213在AIO-3568J开发板在原厂Android12下跑通ap6275s 2023/2/13 8:59 一、从AIO-3568的Android11的kernel中抠出来AP6275S的驱动: 1、 Z:\android12-rk3588-new\kernel-4.19\arch\arm64\configs\rockchip_defconfig # CONFIG_WLAN_VENDOR_QUANTENNA is not set …