当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] 一、编译1.busybox简介熟悉嵌入式Linux的人对busybox一定不会陌生。它被非常形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX命令和工具结合

 一、编译

1.busybox简介

熟悉嵌入式Linux的人对busybox一定不会陌生。它被非常形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX命令和工具结合到了一个单独的可执行程序中。虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中,已经足够了。

下面就来一步步地用busybox从无到有地建立一个全新的Linux文件系统。

2. 编译busybox

完整的源代码可以从http://www.busybox.net下载,压缩包大小为1.3 MB左右。将源码解压之后,进入到busybox1.00目录中,运行make menuconfig可以打开它的编译界面。这个界面和Linux内核编译有些接近。在这个菜单界面中除了可以对最终编译到可执行文件中的命令进行选择外,还有很多其他设置也是非常重要的。下面三个目录是很多人都会感兴趣的:

我改变了以下选项:

General Configuration --->

[*] Support for devfs

Build Options --->

[ ] Build BusyBox as a static binary (no shared libs)

[*] Do you want to build BusyBox with a Cross Compiler?

/usr/local/arm/3.4.1/bin/arm-linux-

(/usr/local/arm/3.4.1/bin/arm-linux-) Cross Compiler prefix

Installation Options --->

(./_install) BusyBox installation prefix

然后到当前目录建立一个_install的文件夹。

Linux Ext2 FS Progs --->

[*] e2fsck

Linux Module Utilities --->

[*] insmod

[*] rmmod

[ ] lsmod

[ ] modprobe

--- Options common to multiple modutils

[*] Support tainted module checking with new kernels (NEW)

[ ] Support version 2.2.x to 2.4.x Linux kernels

[*] Support version 2.6.x Linux kernels (NEW)

注意此处的选择,可能会影响到编译不过。

Networking Utilities --->

[*] ftpget

[*] ftpput

...

[*] wget

...

[*] telnet

[*] Pass TERM type to remote host (NEW)

[*] Pass USER type to remote host (NEW)

[*] telnetd

注释:tlenetd命令是一个远程登录服务程序,把它编译进busybox中会为将来的调试提供很多的方便。

Shells --->

[*] Enable builtin version of 'echo'

Linux System Utilities --->

[*] mount

[*] Support mounting NFS file systems

注释:这个比较重要,否则会在后来的mount时候出现mount program didn't pass remote address的错误。

在Installation Options里面可以设置安装的路径,即设置为新文件系统的根目录。当然也可以用缺省的 _install目录,安装之后再复制到新文件系统中去。

在设置Login/Password Management Utilities的时候,为了免去配置glibc的麻烦,最好设置使用busybox自己的password和shadow文件的功能(Use internal password and group functions rather than system functions)。

busybox提供的命令无疑比较全面,但它的缺省配置还不能构成一个功能比较完备的文件系统。必须要添加的命令有Login/Password Management Utilities里面的getty、login和passwd,这些命令从前是由另外一个软件包tinylogin所提供的。当然,如果不需要一个交互的登录界面,这些命令也可以去掉。通过设定内核参数init=/bin/sh可以在系统启图1busybox的编译配置界面动后直接得到一个shell。

设置完毕后保存、退出,执行make; make install命令,busybox将在未来的根文件系统中建立/usr、/bin、/sbin等目录。从中可以看到,编译好的busybox可执行文件和其他应用命令的符号链接。典型的busybox文件大小在动态链接的情况下是300 KB左右,静态链接为800 KB左右,用它实现的文件系统完全可以控制在1 MB以下。但就目前为止,得到的还不是一个完整可用的文件系统,必须要在这个基础上添加一些必要的文件,让它可以工作。

编译的时候可能出错:variable or field '__user' declared void

可以将

/usr/local/arm/3.4.1/arm-linux/sys-include/linux/fd.h

中修改下面的语句,编译完成后再修改回去。

//void __user *data;

void *data;

3. 安装

make install

二、制作文件系统

用已经编译好的busybox制作完善的能自启动的文件系统

1、建立文件夹arm2410-root-1.0:

mkdir /ebutek/arm2410-root-1.0

export ARM2410HOME=/ebutek/arm2410-root-1.0

export BUSYBOXHOME=/ebutek/busybox-1.1.0

2、将busybox编译后的文件拷贝到arm2410-root-1.0.

cp -fr $BUSYBOXHOME/_install/* $arm2410HOME

拷贝后可以看到$arm2410HOME下的文件如下:

ls -all $arm2410HOME

总计 20

drwxr-xr-x 5 root root 4096 01-24 13:58 .

drwxr-xr-x 16 root root 4096 01-24 13:56 ..

drwxr-xr-x 2 root root 4096 01-24 13:58 bin

lrwxrwxrwx 1 root root 11 01-24 13:58 linuxrc -> bin/busybox

drwxr-xr-x 2 root root 4096 01-24 13:58 sbin

drwxr-xr-x 4 root root 4096 01-24 13:58 usr

3、创建其它文件夹:

cd $arm2410HOME

mkdir mnt root var tmp proc boot etc lib dev

mkdir var/{lock,log,mail,run,spool}

3、将交叉编译器中的busybox需要的lib库文件拷贝过来。

在/usr/local/arm/3.4.1/arm-linux/lib中找到如下文件和链接:

-rwxrwxrwx 192519 ld-2.3.2.so

lrwxrwxrwx 111 ld-linux.so.2 -> ld-2.3.2.so

-rwxrwxrwx 1 1190032 libc-2.3.2.so

lrwxrwxrwx 113 libc.so.6 -> libc-2.3.2.so

-rwxr-xr-x 118348 libcrypt-2.3.2.so[!--empirenews.page--]

lrwxrwxrwx 117 libcrypt.so.1 -> libcrypt-2.3.2.so

将其拷贝到$arm2410HOME/lib中。

(可以编写一个脚本:vi envCp,将下面的命令拷贝至脚本然后执行即可:执行chmod u+rx envCp,然后./envCp)

cp -l /usr/local/arm/3.4.1/arm-linux/lib/ld-2.3.2.so $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/ld-linux.so.2 $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/libc-2.3.2.so $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/libc.so.6 $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/libcrypt-2.3.2.so $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/libcrypt.so.1 $arm2410HOME/lib

拷贝后检查一下:

ls -all $arm2410HOME/lib,应该和上面相同,包括文件及其链接。

4、设定etc,准备启动:

将busybox源代码 example/bootfloopy/etc目录中的文件拷贝过来到$arm2410HOME/etc。

cp -fr $BUSYBOXHOME/examples/bootfloppy/etc/* $arm2410HOME/etc

etc文件夹是许多系统配置文件保存的地方。这些文件非常重要,如果配置错误,就可能影响系统的启动。busybox源代码 example/bootfloopy/etc目录中的文件算是一个简单的例子,可以把其中的文件拷贝过来作为基础。(在 example/bootfloopy目录中的一些脚本和文档也很值得阅读)

首先inittab文件是系统启动后所访问的第一个脚本文件,后续启动的文件都由它指定。这个文件的格式和普通微机Linux上的inittab是有区别的,其具体含义可以参考busybox的文档。下面是一个比较简单的例子:

::sysinit:/etc/init.d/rcS

tty0::respawn:/sbin/getty 38400 tty0

tty2::askfirst:/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount ar

::shutdown:/bin/mount / o remount,ro

其中第一行指定了系统的启动脚本为/etc/init.d/rcS;第二行指定在第一个虚拟终端打开一个登录会话;第三行指定在第三个虚拟终端打开一个无须登录验证的shell;第四行指定了当按下ctrl+alt+del组合键时的执行命令;最后两行指定了关机时执行的操作。

fstab文件定义了文件系统的各个“挂接点”,需要与实际的系统相配合。一个简单的fstab文件如下:proc/procprocdefaults00

/dev/hda1/ext2rw,noauto01

devpts/dev/ptsdevptsdefaults00

其中第三行是为UNIX PTYs准备的,telnetd要用到。

profile 文件是终端登录之后首先运行的脚本,这里可以不去管它。我们比较关心的是系统在无人登录的情况下有哪些程序要执行。从inittab文件可以看出系统启动之后要运行/etc/init.d/rcS脚本,需要启动的程序和需要进行的设置都可以写在这里面。一个可能的rcS文件如下:

#! /bin/sh

echo e 'Starting System'

ifconfig lo 127.0.0.1

ifconfig eth0 192.168.0.100

hostname F /etc/hostname

/bin/mount / o remount,rw

/bin/mount /proc

/bin/mount /dev/pts

/usr/sbin/telnetd

dmesg > /var/log/dmesg

为了满足终端登录用户验证的要求,etc目录下还需要有passwd、group和shadow (在编译busybox时如果不选择shadow功能将不需要这个文件)。这些文件至少要包含 root用户的定义,如下所示:

passwd:

root:x:0:0:root:/root:/bin/sh

group:

root:x:0:

shadow:

root::12179:0:99999:7:::

其中,如果shadow (对于不支持shadow的系统则是passwd )文件的第一个冒号和第二个冒号之间没有内容,表示这个用户登录不需要密码。如果需要设定密码或者增加新的登录用户,就可以参考开发主机上的相应文件,或者在目标系统启动之后用passwd命令和adduser命令完成。

最后还可以给目标机起一个名字,在/etc目录下建立文件hostname,将起好的名字写到里面。前面介绍的启动脚本rcS,通过hostname命令把文件的内容设置为机器名。

5、制作yaffs文件系统:

找到yaffs制作工具mkyaffsimage,将其拷贝到/bin目录下,以便于利用系统环境变量能找到,然后用下面的命令:

mkyaffsimage filesystem root.yaffs

就可以filesystem目录制作成一个名叫root.yaffs的映像。

6、用uboot将yaffs文件系统下载到目标板:

(1)准备tftp下载

将制作好的yaffs文件系统映像拷贝到/tftpboot下,修改其权限至少为755, 然后重新启动 xinetd 服务。

chmod 755 root.yaffs

/etc/init.d/xinetd restart

(2)下载到目标板

启动目标板到uboot,在minicom下输入以下命令:

tftp 33000000 root.yaffs

下载完成后uboot会返回文件的大小,假设为x

nand erase 230000 3dcc000(此处擦除的要比较大,因为内核要挂载一些文件)

nand write.yaffs 33000000 230000 x

重新启动目标板,如果能启动到busybox提示符即可。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭