Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346541
  • 博文数量: 102
  • 博客积分: 3140
  • 博客等级: 中校
  • 技术积分: 680
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-28 11:44
个人简介

开阔未来

文章分类

全部博文(102)

文章存档

2015年(10)

2014年(1)

2013年(1)

2012年(4)

2011年(8)

2010年(24)

2009年(51)

2008年(3)

我的朋友

分类: LINUX

2009-04-17 20:16:26

编译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
 
经典参考:
下载busybox
文件系统制作
 
移植基本过程:
1. 到下载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
 
配置可参考:
(小寿制作)busybox-1.1.3制作根文件系统!
http://blog.chinaunix.net/u1/55630/showart_436693.html
busybox的编译1.4.2 和1.5.1(根文件系统制作)
http://blog2.eastmoney.com/stevenhe,856261.html
文件系统的制作   luofuchong
http://www.cnitblog.com/luofuchong/archive/2007/01/10/21711.aspx
 
 
可能会出现的错误:
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

相关问题可参考
交叉编译busybox

Busybox 的编译过程
http://blog.tianya.cn/blogger/post_show.asp?BlogID=1351475&PostID=12381125
 
 
建立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、rcS 等文件的编写,可参考:
用BusyBox制作根文件系统

linux 2.6.22.1内核在s3c2410平台的移植(完美版)   四:文件系统的制作 部分
http://blog.163.com/scan_study/blog/static/5437883420071024224295/
 
例如linuxrc内容如下:
$vim rootfs/linuxrc
#!/bin/sh
echo "Hello linux ,gggggg"
exec /sbin/init
然后修改权限:chmod 775 linuxrc
 
用密码登录可参考:
用busybox制作嵌入式Linux的文件系统

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目录下面!
 
参考:http://blog2.eastmoney.com/stevenhe,856261.html
http://blog.chinaunix.net/u1/58780/showart_1080300.html  用busybox创建基于Linux2.6.24内核的nfs根文件系统
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目录)
阅读(699) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~