简单的busybox创建_用Busybox创建文件系统

编译busybox的组合:busybox-1.0.0   arm-linux-gcc-2.95.3 (sbc2410等开发板)

busybox-1.1.3   arm-linux-gcc-3.3.2

buxybox-1.7.3   arm-linux-gcc-3.4.1

移植基本过程:

1. 到http://busybox.net/downloads/busybox-1.7.3.tar.bz2下载busybox;

2. 解压busybox1.7.3

tar jxvf busybox-1.7.3.tar.bz2

3. make defconfig

4. make menuconfig

在[build options]中选择[Build busybox as a static binary]

主要是C库的连接方式,安装目录等。

5. make

6. 创建rootfs目录

7. make install

文件系统的制作   luofuchong

可能会出现的错误:

1. 出现如下错误

CC miscutils/taskset.o

miscutils/taskset.c:17: error: parse error before '*' token

miscutils/taskset.c:18: warning: function declaration isn't a prototype

miscutils/taskset.c: In function `__from_cpuset':

miscutils/taskset.c:22: error: `CPU_SETSIZE' undeclared (first use in this function)

miscutils/taskset.c:22: error: (Each undeclared identifier is reported only once

miscutils/taskset.c:22: error: for each function it appears in.)

miscutils/taskset.c:26: warning: implicit declaration of function `CPU_ISSET'

miscutils/taskset.c:26: error: `mask' undeclared (first use in this function)

miscutils/taskset.c: In function `taskset_main':

miscutils/taskset.c:47: error: `cpu_set_t' undeclared (first use in this function)

miscutils/taskset.c:47: error: parse error before "mask"

miscutils/taskset.c:68: warning: implicit declaration of function `CPU_ZERO'

miscutils/taskset.c:68: error: `new_mask' undeclared (first use in this function)

miscutils/taskset.c:69: error: `CPU_SETSIZE' undeclared (first use in this function)

miscutils/taskset.c:71: warning: implicit declaration of function `CPU_SET'

miscutils/taskset.c:78: error: `mask' undeclared (first use in this function)

make[1]: *** [miscutils/taskset.o] Error 1

make: *** [miscutils] Error 2

make menuconfig

找到[Miscellaneous Utilities],去掉[task set]

2. time.c

libbb/time.c:20: error: "CLOCK_MONOTONIC" undeclared (first use in this function)

make menuconfig

去掉Busybox Settings->Busybox Library Tuning->[]Use clock_gettie(CLOCK_MONOTONIC) syscall

建立rootfs目录,可以使用如下脚本文件:

#!/bin/bash

mkdir rootfs

cd  rootfs

mkdir bin dev etc lib proc sbin sys usr mnt tmp var

chmod 1777 tmp

mkdir usr/bin  usr/lib  usr/sbin  lib/modules

mkdir var/lock var/lib var/log var/run var/tmp

chmod 1777 var/tmp

cd dev/

mknod -m 666 console c 5 1

mknod -m 666 null c 1 3

cd ../

注意:执行脚本时,要切换到root用户。

在内核目录执行:

$cd home/arm/linux-2.6.14.1/

$make modules

$make modules_install INSTALL_MOD_PATH=/nfs/rootfs/

例如linuxrc内容如下:

$vim rootfs/linuxrc

#!/bin/sh

echo "Hello linux ,gggggg"

exec /sbin/init

然后修改权限:chmod 775 linuxrc

用密码登录可参考:用busybox制作嵌入式Linux的文件系统http://www.embed.com.cn/downcenter/Article/Catalog34/354.htm

busybox login :启动busybox文件系统后怎么主动提示 用户登陆认证?

在配置BusyBox时都加了getty,passwd,login等命令,也加入了文件group shadow passwd 但还是没有弹出界面,自己输入login后倒是提示你输入用户名和密码

内核启动后加载文件系统,busybox为1.1.3

挂载成功后就直接到

BusyBox   v1.1.3   (2007.12.13-06:5

Please   press   Enter   to   activate   this   console.

怎么使启动文件系统立即需要用户验证?

编译工具的选择有两种方式:

ARM开发板:要使用交叉编译,所以我们要指定交叉编译工具的位置,可通过现面的方法实现:

方法一: 修改宿主机的PATH变量,使其包含交叉编译工具的目录;然后在调用make命令时,指定TARGET_ARCH和CROSS变量:make TARGET_ARCH=arm CROSS=arm-linux-。

方法二:新版的busybox可以在配置中设定交叉编译工具的,直接运行make就跟为本机编译busybox没有任何区别了。http://hi.baidu.com/xuym04/blog/item/49d83f6e645415df81cb4ac7.html

动态编译方式,准备链接库:

《ARM微处理器与应用开发》 赖于树  P248

复制链接库的步骤:

$cp /usr/local/arm/3.4.1/arm-linux/lib/

$cp *-*.so  ${PRJROOT}/rootfs/lib

$cp -d *.so.[*0-9]  ${PRJROOT}/rootfs/lib/

$cp libSegFault.so  libmemusage.so  ${PRJROOT}/rootfs/lib/

这些库文件中包含大量的调试信息,交叉编译工具链提供了一个除去这些调试信息的工具:strip

$arm-linux-strip  ${PRJROOT}/rootfs/lib/*.so

参考:基于s3c2440 yaffs2 文件系统的移植http://q.163.com/kjava/blog/www_yin/362652432008269461663/#362652432008269461663

3. 建立动态运行库

# cp -rfd /usr/local/arm/4.0.3/arm-linux/lib/*  rootfs/lib/

拷贝经过交叉编译的库文件,参数-d,保持库文件的链接关系。

# rm -rf rootfs/lib/*.a

删除所有的静态库文件。

注:/usr/local/arm/4.0.3/ 为交叉编译工具链的存放目录。

# arm-linux-strip rootfs/lib/*

移除所有的符号信息, 压缩库空间。

如果不知道需要哪些共享库,可以在你写好自己的程序后使用#ld hello 命令来看看需要哪些共享库然后在复制到/lib目录下面!

4 查看共享了哪些库文件

用命令 arm-linux-readelf -a ${program} | grep "shared library"

---------------------------------------------------------------

[root@localhost bin]# pwd

/root/maoyong/busybox-1.4.2/_install/bin

[root@localhost bin]# arm-linux-readelf -a busybox | grep "shared library"

0x00000001 (needed)                     shared library: [libcrypt.so.1]

0x00000001 (needed)                     shared library: [libm.so.6]

0x00000001 (needed)                     shared library: [libc.so.6]

------------------------------------------------------------------

如上所示 要把 /usr/local/arm/3.3.2/arm-linux/lib目录下的

libcrypt.so.1

libm.so.6

libc.so.6

文件是busybox所需的共享库文件,要把它以及和他相关的链接文件拷贝到

你新建的文件系统的 lib 目录。

(注意: libcrypt.so.1    libm.so.6 libc.so.6相关的链接文件也要拷贝到lib目录)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值