编译Sysvinit,bash,coreutils源码包

发布于 2022-09-18 05:18:00 字数 1246 浏览 8 评论 0

制作一个rootfs(root file system)需要编译/安装Sysvinit,bash,coreutils源码包,这3个源码包为系统启动后建立一个基本的命令运行环境。
其中比较关键的,Sysvinit会在rootfs的sbin目录下安装可执行文件init,系统启动加载完kernel,会运行init,产生init进程,init进程会fork其它
子进程;bash会在rootfs的bin目录下安装bash可执行文件,运行bash,会有提示符,建立人机交互环境,一般有/bin/sh软连接指向/bin/bash;安装bash
源码包只能运行一些基本的命令,比如,cd,pwd,还需安装coreuils源码包,/bin目录下会安装ls,cat等常用命令。
1.编译/安装Sysvinit(sysvinit-2.86.tar.gz)
一般来说,编译/安装linux源码包需要3步,1. ./configure产生Makefile;2. 根据Makefile,make编译生成可执行文件,动态/静态库等文件;3. make install
将第2步生成的结果copy到目标文件夹下。但是,Sysvinit包已有Makefile,查看Makefile,STATIC变量指定是否静态连接,缺省使用动态连接,ROOT变量指定安装路径。
具体命令如下:
make STATIC=-static //使用静态连接,因为init在加载rootfs之前,如果使用动态连接,需要使用rootfs下的lib和usr/lib目录下的库文件,所以不能使用动态连接。
make ROOT=/lfs //假设 /lfs是rootfs
2.编译/安装bash(bash-4.0)
查看bash包的configure文件,有prefix变量,prefix和Makefile的DESTDIR一起指定bash安装路径,
比如,prefix=/a,DESTDIR=/lfs,bash安装路径是/lfs/a/bin,一般让prefix=/
具体命令:
./configure --prefix=/
make
make DESTDIR=/lfs install
3.编译/安装coreutils(coreutils-7.2.tar.gz)
和编译/安装bash类似,生成文件缺省安装在bin目录下
./configure --prefix=/
make
make DESTDIR=/lfs install
以上3个源码包编译安装,需要主意指定目标路径,如果使用root登录,没有指定DESTDIR安装,会将生成文件安装到当前系统rootfs,有可能造成当前系统崩溃。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

2022-09-25 05:18:01

lz可以在把步骤简化一下,先编译一个bash程序,在grub启动时候手动指定init=/bin/bash,成功后再完善系统这样便于定位错误也易于理解。

御守 2022-09-25 05:18:00

bash应该最先安装,否则的话,安装了coreutils和sysvinit没有bash,命令也无法使用的。

另外:
楼主文中提到的 “2. 根据Makefile,make编译生成可执行文件,动态/静态库等文件;”  中的“动态/静态库等文件”指的是什么?偶懵了。

叫嚣ゝ 2022-09-25 05:18:00

安bash,sysvinit,coreutils需要有先后顺序吗?如果,没提示有其它源码包依赖,当然可以安装该源码包了。
一般,先安好sysvinit,测试一下,每安一个,测试一下,有错误好定位。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文