一步步完善rootfs:4.配置动态链接库

嵌入式Linux根文件系统实战:从BusyBox到最小rootfs构建与裁剪 在嵌入式Linux开发中,根文件系统(rootfs)是系统启动后用户态运行的基石,而BusyBox作为一套核心工具集,以单一二进制集成数百条常用命令,通过符号链接实现多功能复用,成为构建最小文件系统的黄金标准。理解init进程、VFS与设备节点机制,能帮助开发者厘清内核从挂载rootfs到启动第一个进程的完整链路。本文从工程实践视角出发,围绕BusyBox的静态/动态编译选择、交叉编译环境的搭建、最小rootfs的目录设计、inittab与rcS初始化脚本配置,以及mdev动态设备管理等关键技术展开,并结合 阅读详情

一、动态链接库作用

编译程序可分为动态编译和静态编译,静态编译出来的可执行程序大小相比较于动态编译是很大的,所以为了缩小程序所占的资源,一般使用动态编译,动态编译的程序在运行时会依赖动态链接库去执行,动态链接库会提供API给程序调用。

二、查找动态链接库

动态链接库位置在交叉编译工具链下面,可以使用find命令进行查找,如下图所示,我的动态链接库就在./arm-none-linux-gnueabi/libc/lib目录下,截图的下方还包含了很多查找到的内容,要自己去分辨一下。不同的编译工具,链接库的位置是不一样的。

三、拷贝动态链接库

root@ubuntu:/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib# cp *so* /root/rootfs_zht/rootfs/lib/ -rdf

动态链接库下面有好多是链接文件,所以执行cp的时候注意加上-rdf选项,操作执行完之后进入开发板就可以看到如下图所示:

四、缩小链接库体积

动态链接库so文件中包含了调试信息,这些调试信息在程序运行时是没用的,并且这些符号会占用一定空间,在传统的嵌入式系统中flash空间是有限的,所以为了节省空间常常把这些调试信息去掉。
去掉调试信息的命令如下,arm-linux-strip命令要看你的交叉编译工具链,不是固定的名称。

root@ubuntu:~/rootfs_zht/rootfs# arm-linux-strip lib/*so*

五、测试程序

我在ubuntu中(nfs挂载rootfs)创建文件夹、写代码、编译的过程如下:

root@ubuntu:~/rootfs_zht/rootfs# ls
bin  dev  etc  lib  linuxrc  proc  root  sbin  sys  tmp  usr  var
root@ubuntu:~/rootfs_zht/rootfs# mkdir test
root@ubuntu:~/rootfs_zht/rootfs# cd test
root@ubuntu:~/rootfs_zht/rootfs/test# vi hello.c
root@ubuntu:~/rootfs_zht/rootfs/test# vi Makefile
root@ubuntu:~/rootfs_zht/rootfs/test# make
arm-linux-gcc hello.c -o hello_dynamic
arm-linux-gcc hello.c -o hello_static -static
root@ubuntu:~/rootfs_zht/rootfs/test# ls
hello.c  hello_dynamic  hello_static  Makefile
root@ubuntu:~/rootfs_zht/rootfs/test# 

hello.c的内容:

#include <stdio.h>

void main()
{
        printf("hello world.\n");
}

Makefile的内容:

all:
        arm-linux-gcc hello.c -o hello_dynamic
        arm-linux-gcc hello.c -o hello_static -static

clean:
        rm hello_dynamic hello_static

开发板上执行的结果:


参考资料: 朱老师嵌入式Linux

手动构建rootfs及文件功能分析 手动构建rootfs及文件功能分析这份笔记记录了从0开始构建一个最小根文件系统的流程,从而达到分析其目录结构及文件的目的,基于的kernel版本为2.6.35 阅读详情

相关推荐

从零构建嵌入式Linux:BusyBox定制化根文件系统rootfs的实践指南

本文详细介绍了如何从零构建嵌入式Linux的BusyBox定制化根文件系统(rootfs),包括BusyBox配置与编译、根文件系统骨架构建、动态库与设备文件处理等关键步骤。通过实战指南帮助开发者掌握精简高效的rootfs构建技巧,适用于资源受限的嵌入式设备开发。

weixin_30582943的博客 222

根文件系统(rootfs)-4

一、根文件系统的作用 是linux挂载的第一个文件系统,rootfs包含shell命令、linux系统配置文件(文件系统的挂载、网络服务、用户名、主机名、用户密码、环境变量...)、linux应用程序、应用程序处理的数据、独立的驱动模块(*.ko)。 根文件系统,相当于linux内核外围的一个应用环境。 ====================================

Cool2Feel的博客 3977

嵌入式Linux启动全解析:Uboot、Kernel与Rootfs的协作与实战

在嵌入式系统开发中,系统启动流程是理解设备从硬件上电到应用运行的核心基础。其基本原理遵循经典的引导加载程序(Bootloader)→操作系统内核(Kernel)→根文件系统(Rootfs)的递进式加载链。Bootloader(如Uboot)负责初始化最基础的硬件环境,为加载内核做好准备;内核则接管硬件资源,进行深度初始化并管理进程、内存等核心子系统;最终,内核需要挂载一个包含应用程序和库的根文件系统,才能完成启动并进入用户空间。这一流程的技术价值在于实现了硬件抽象与软件分层,使得嵌入式设备能够运行复杂的应用

weixin_33698043的博客 327

嵌入式Linux应用依赖库打包详解

在嵌入式 linux 中运行过运用程序的小伙伴因该多多少少都遇到过在 Linux 终端启动运用程序时终端输出 “-sh ./xxx: not found” 的问题,这是应用程序依赖的动态库缺失导致的,验证该问题的办法是使用静态编译去编译应用程序(静态编译会将应用程序依赖的库和应用程序本身打包在一起,所以静态编译的应用程序体积很大,所以一般不使用)。Linux 系统缺失依赖库时可以使用静态编译或在 Linux 根文件系统中添加程序依赖的库文件,静态编译只需要给 gcc 添加-static。

zhbi98 的技术 Blogs 1741

NFS服务器部署指南:嵌入式Linux开发板rootfs网络挂载配置与排错

在嵌入式Linux开发中,rootfs的部署与更新是影响调试效率的关键环节。网络文件系统(NFS)允许开发板通过网络挂载根文件系统,免去反复烧写存储介质的繁琐流程,从而加速迭代验证。NFS基于RPC协议架构,服务端通过rpcbind与nfs-server协同工作,客户端内核需启用对应的NFS客户端支持。相比NFS v4,v3版本依赖更少,更适合老内核嵌入式设备。合理配置exports的权限参数、固定协议版本与传输层类型,即可实现稳定的网络根文件系统挂载。本文围绕NFS服务器的搭建、开发板挂载rootfs的启

weixin_32349093的博客 171

linux精简根文件系统rootfs

比较精简的跟文件系统

Helper2416开发板学习③搭建/lib链接库

接着上一篇说的,根文件系统我们还差/lib文件夹中的内容是空的了,

欢迎光临 479

libmessage-0.1.tar.bz2

在yocto中加入so动态库并并编译到问你件系统,libmessage-0.1.bb,libmessage-0.1.bb,libmessage-0.1.bb,libmessage-0.1.bb,libmessage-0.1.bb

【ZYNQ】petalinux包含自定义的动态库

通过github下载源码,自己编译生成的非Xilinx官方动态库,应该如何使petalinux在生成镜像时包含进去呢?

夏言谦的博客 2084

银河麒麟服务器操作系统V10 SP1:跨架构激活与设备更换无忧指南

本文详细解析了银河麒麟服务器操作系统V10 SP1的跨架构激活新特性。该特性彻底解除了授权与CPU架构的绑定,允许同一份授权在x86、ARM、龙芯等不同架构服务器间灵活使用。文章提供了从新设备激活到硬件更换后保持激活状态的全流程实战指南,并分享了内网环境部署等高级技巧,助力企业简化运维、提升硬件资源管理灵活性。

ff678的博客 352

【MDC开发者课程】MDC功能软件-归控算法介绍

规控算法

博客标题不能为空我也没办法 1844

Linux学习第9天:关于Linux移植之根文件系统构建:万丈高楼平地起

根文件系统rootfs('/')是 Linux 系统中所有其他文件系统和目录的起源。在 Linux 中,根文件系统是嵌入式系统的关键组成部分,它包含了操作系统运行所需的所有基本文件和数据,能够使操作系统顺利地启动和运行,并且提供文件系统的访问和管理功能。它还包含了驱动程序、系统库文件以及其他与系统运行和管理有关的数据。所以可以简单的将他理解为一个文件夹或是一个目录。一般来讲,嵌入式系统中根文件系统占用内存空间较小,通常采用压缩的文件系统(如 ext2、ext3 或 ext4 文件系统)来进行存储。

918

Ubuntu20.04下Intel RealSense D435i相机驱动配置全攻略(含ROS Noetic适配)

本文详细介绍了在Ubuntu20.04系统下配置Intel RealSense D435i相机驱动的完整流程,包括libRealsense SDK 2.0安装、ROS Noetic适配及常见问题解决方案。通过实战指南帮助开发者快速实现深度相机与ROS的集成,适用于机器人视觉和SLAM应用开发。

weixin_29281915的博客 512

Linux:交叉编译环境rootfs / sysroot

rootfs(Root File System)= 目标设备 Linux 启动后看到的也就是开发板真正使用的系统。sysroot = 交叉编译时给编译器用的“目标系统根目录”编译器通过它知道:“我要给 ARM Linux 编程序,不是给 PC。

m0_64473562的博客 853

Windows 下 Codex 安装全记录:从零到一的保姆级图文教程

本文主要介绍了Windows 下 Codex 安装全记录:从零到一的保姆级图文教程,希望能对学习使用 Codex 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 方案一 2.2 方案二 3. 报错解决方案

weixin_43178406的博客 14万+

6、探索音乐结构中的统一性:贝多芬《英雄交响曲》第一乐章的深度剖析

本文深入剖析了贝多芬《英雄交响曲》第一乐章的音乐结构,探讨其统一性的来源及表现形式。通过主题与动机、和声与调性、旋律与节奏、织体与动态等多方面的分析,揭示了这部作品在技术层面和情感表达上的卓越成就。

b9c0d的博客 518

linux之rootfs (UBIFS)

大大小小事情一堆,好久不更新了,这次记录下移植ubifs文件系统步骤。 虽然通常是先kernel后rootfs,但是kernel要不停改,rootfs却必须得先存在,所以先搞定rootfs,rootfs采用据说是nand flash上最先进的ubifs。 上http://www.busybox.net/下载busybox源代码,目前最新的稳定版本为1.18.1,解压至Workspaces。 以下切换到root用户进行操作(在其他用户模式下编译出来的rootfs登录时不是以root登录,好像..

一口Linux的专栏 2601

【AI大模型:前沿】41、建筑行业大模型创业全指南:从技术突破到成本控制与落地路径

建筑行业大模型是“高门槛、高回报”的长周期赛道,适合有建筑行业资源+AI技术背景的团队切入。数据是基础,场景切割是策略,合规是底线。通过聚焦“设计生成+规范审查”等刚需场景,用“仿真数据+开源模型”降低成本,3-5年内有望成长为行业独角兽。对于中小团队,避开千万级全流程模型的红海,深耕“小而美”的单点工具,同样能实现盈利与快速扩张。关键成功公式建筑AI创业 = 50%数据壁垒构建 + 30%场景精准切入 + 20%成本控制能力。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 2114

MiceWine RootFS深度解析:如何构建和配置Windows运行环境

MiceWine是一款创新的Android应用,旨在让Windows应用程序和游戏在Android智能手机上运行。作为一款基于Wine和Box64技术的跨平台兼容层解决方案,MiceWine通过精心设计的RootFS(根文件系统)为Windows应用程序提供了完整的运行环境。本文将深入解析MiceWine RootFS的核心架构、配置方法和优化技巧,帮助用户更好地理解和使用这一强大的Windows

gitblog_00925的博客 467

新系统申请软件著作权详细操作说明

今年八月底版权中心系统升级,新系统相对好用一些,至少不用再拿IE访问了,但是多了一项实名认证。下面介绍新系统的操作流程。 目录注册、登录和实名认证注册登录实名认证软件登记申请申请表填写鉴别材料身份证明文件权利归属证明文件其他材料提交材料变更登记 注册、登录和实名认证 首先访问版权中心系统:https://register.ccopyright.com.cn/login.html,如果老系统有账号直接登录即可,没有的话需要注册。 注册 点击注册按钮进入注册。 根据实际情况选择个人或单位,每个个人或单位只能在

Programming Talk 1万+

【蓝牙协议栈】【BLE】详解蓝牙BLE连接建立过程

advertiser。发出广播的设备observer或者scanner。可以扫描广播的设备initiator。能发起连接的设备master或者central。连接成功后的主设备,即主动发起packet的设备slave或者peripheral。连接成功后的从设备,即被动回传packet的设备图11通过时间把observer,initiator和central串起来了,其实这三个角色是相互独立的,也就是说一个设备可以只支持observer角色,而不支持initiator和central角色。

风云说通信 2521

rootfs 详解与裁剪优化记录

rootfs(Root File System,根文件系统)是 Linux 内核启动后挂载的第一个文件系统(挂载点为),是整个用户空间的运行根基。内核完成硬件初始化后,会挂载 rootfs 并执行其中的init进程,正式进入用户态。它包含了系统运行必需的初始化程序、命令工具、动态库、配置文件、设备节点等所有核心组件。

C/C++ 367

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

2026年正点原子开发板移植方案——从0开始的Rootfs之路(4)Rootfs 目录结构创建:Linux 文件系统的“骨架“

本文详细介绍了为2026年正点原子开发板创建Linux根文件系统(rootfs)目录结构的过程。首先解释了Linux标准目录结构FHS(Filesystem Hierarchy Standard),包括/bin(基本命令)、/sbin(系统命令)、/etc(配置文件)、/lib(共享库)等必需目录。文章重点讲解了如何使用mknod命令创建/dev目录下的关键设备文件,如控制台设备/dev/console、空设备/dev/null、随机数设备/dev/random等,这些是系统启动和运行的基础。最后提供了/e

charlie114514191的博客 540

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

制作简单的rootfs

分析简单的根文件系统中所必须的文件 1.1在嵌入式系统中的根文件系统与桌面版的根文件系统文件基本上类似,所以用Ubuntu中根文件系统问模板,进行分析: 1.1.1、bin  sbin   linuxrc   是必须的,但是这三个目录以及里面的文件都是移植busybox并安装的时候由busybox生成的 1.1.2、etc   是很关键很重要的一个。目录中的文件都是运行时配置文件,都是直接...

David_361的博客 2292

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OK6410A 开发板 (九) 4 buildroot-2021.02 OK6410A rootfs 中的动态链接库

rootfs中动态链接库的来源 来自于 交叉编译链 rootfs 中 libc.so.6 来源猜想 suws@ubuntu:~/ok6410/system-new/buildroot/output$ sudo find . -name libc.so.6 | xargs ls -l lrwxrwxrwx 1 suws suws 12 May 30 2014 ./host/arm-buildroot-linux-gnueabi/sysroot/lib/libc.so.6 -> libc-2.

u011011827的博客 405

linux的进程1:rootfs与linuxrc

在内核启动的最后阶段启动了三个进程 进程0:进程0其实就是刚才讲过的idle进程,叫空闲进程,也就是死循环。进程1:kernel_init函数就是进程1,这个进程被称为init进程。进程2:kthreadd函数就是进程2,这个进程是linux内核的守护进程。这个进程是用来保证linux内核自己本身能正常工作的。 在嵌入式操作系统中一般会指定/linuxrc为init进程。 1、/linuxrc是一个可执行的应用程序 (1)/linuxrc是应用层的,和内核源码一点关系都没有 (2)/linuxrc在开

一口Linux的专栏 471
上一篇: 一步步完善rootfs:3.用户登录
下一篇: 嵌入式Linux--配置gdb调试环境
奔向星辰花海
博客等级 码龄10年 113粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值