Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33491
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-04 21:15
文章分类
文章存档

2015年(11)

2014年(2)

我的朋友

分类: LINUX

2015-06-01 14:48:45

原文地址:busybox制作根文件系统 作者:Reny

1,建立目录
#!/bin/bash
mkdir rootfs
cd rootfs
mkdir bin dev etc lib proc sbin tmp usr var
chmod 1777 tmp
mkdir usr/bin usr/lib usr/sbin
mkdir var/lib var/lock var/log var/run var/tmp
chmod 1777 var/tmp
#mknod -m 600 console c 5 1

2,配置busybox
一,BusyBox Setting->Build Options->Cross Compiler prefix  //添加交叉编译头
二,填写安装路径,Busybox Settings"->"Installation Options"->" Don't use /usr"
    默认 ./_install
三,出现如下错误,可以忽略
Trying libraries: crypt m
Library crypt is needed
Library m is needed
Final link with: crypt m

3,make make install 执行如下脚本
set -ex
export PATH=/home/xu_reny/mini2440/chaintool/4.3.2/bin/:$PATH
make
make install

4,把交叉编译工具的库拷贝到文件系统的lib目录下
如果把busybox编译成静态库的就不需要一下库文件也能启动。

怎么知道busybux需要编译器里面那些库呢?用如下办法
#arm-linux-readelf -d busybox 
Dynamic section at offset 0xca014 contains 18 entries:
  标记        类型                         名称/值
 0×00000001 (NEEDED)                     共享库: [libm.so.0]
 0×00000001 (NEEDED)                     共享库: [libc.so.0]
 0×0000000c (INIT)                       0xbe24
 0×0000000d (FINI)                       0xb2054
 0×00000004 (HASH)                       0×80e8
 0×00000005 (STRTAB)                     0xa500
 0×00000006 (SYMTAB)                     0×8b70
 
从上面的结果中,我们可以看到,busybox这个程序使用到了libm.so.0和libc.so.0两个库文件,实际上这是2个符号链接, 分别指向libc-0.9.28.so和libuClibc-0.9.28.so。将以上四个文件分别拷贝到lib目录下。
按理说,这样应该就可以了,但 是仍然无法正常运行。因为libm.so.0和libc.so.0依赖于其他的库
在用上面的方法
#
arm-linux-readelf -d libm.so.0

你会发现他们还要对应的文件ld-uClibc- 0.9.28.so和ld-uClibc.so.0添。拷贝过来,运行正常。


inittab文件内容:(有了这个文件 busybox基本就能启动了)
::sysinit:-/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a


fstab文件内容:
proc  /proc proc  defaults  0 0
none  /tmp  ramfs defaults  0 0
mdev  /dev  ramfs defaults  0 0
sysfs /sys  sysfs defaults  0 0


/etc/init.d/rcSrcS文件内容:
#! /bin/sh
echo hello world this is reny's rootbox

5,如果还是不能启动,一般是image文件制作工具有问题。
mini2440的就分128M的和不是128M的

附件后缀名为tgz。
6,      telnetd功能 添加
busybox默认已经添加了对telnetd和telnet功能的支持,只需要完成一些相关的设置工作就可以启动这2个功能了。
Ø         创建/dev/pts目录
Ø        在/etc/fstab中添加如下信息,挂载devpts文件系统
devpts /dev/pts devpts defaults 0 0
Ø        在/dev目录下增加ptmx设备文件:
#mknod ptmx c 5 2
Ø        在rcS文件中添加如下脚本,启动telnetd
if [ -x /usr/sbin/telnetd ] ;
then
        telnetd&
fi
Ø        在/dev目录下增加null设备文件,否则上述脚本运行时会出错: 提示找不到null文件。
#mknod null c 1 3
此时,telnetd功能开机就可以启动了。
文件:busybox文件系统(文件系统学习必备资料!!!超详细步骤).rar
大小:22KB
下载:下载

文件:mkyaffs2image.tgz.tar
大小:16KB
下载:下载

阅读(1257) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~