免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3567 | 回复: 3
打印 上一主题 下一主题

编译Sysvinit,bash,coreutils源码包 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-16 00:36 |只看该作者 |倒序浏览
制作一个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,有可能造成当前系统崩溃。

论坛徽章:
0
2 [报告]
发表于 2009-11-16 01:01 |只看该作者
bash应该最先安装,否则的话,安装了coreutils和sysvinit没有bash,命令也无法使用的。

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

论坛徽章:
0
3 [报告]
发表于 2009-11-16 12:57 |只看该作者

回复 #2 HELLO_MAX 的帖子

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

论坛徽章:
0
4 [报告]
发表于 2009-11-17 10:30 |只看该作者
lz可以在把步骤简化一下,先编译一个bash程序,在grub启动时候手动指定init=/bin/bash,成功后再完善系统这样便于定位错误也易于理解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP