Chinaunix首页 | 论坛 | 博客
  • 博客访问: 646893
  • 博文数量: 121
  • 博客积分: 4034
  • 博客等级: 上校
  • 技术积分: 1439
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-28 12:42
文章分类

全部博文(121)

文章存档

2017年(8)

2016年(10)

2013年(2)

2012年(3)

2011年(18)

2010年(80)

分类: LINUX

2010-07-22 16:13:07

平台

cpu: s3c2410;
板子: SMDK2410;


busybox性能微调

1. “tab”键补全:

Busybox Setting --->
  Busybox library Tuning --->
    [*] Tab completion

2. 连接/编译选项:

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


编译和安装BusyBox

1. 编译:
编译之前,修改Makefile文件:

 175 ARCH ?= arm
 176 CROSS_COMPILE ?= arm-linux-

然后执行 “make”命令编译BusyBox。 2. 安装:
需要指定安装目录。

 make CONFIG_PREFIX=/opt/rootfs/rootfs install

一切完成以后,将会再/opt/rootfs/rootfs目录下生成许多文件。


/etc下的文件和/dev下的文件

使用mdev创建设备文件:
在使用之前要先确保内核已经设置了CONFIG_SYSFS 和 CONFIG_TMPFS
(作用是使用mdev为了减少对flash的读写,需要支持sysfs文件系统,还要支持tmpfs文件系统) 1. /etc/fstab:

#device mount_point type    option    dump   fsck order
 proc	 /proc	     proc    defaults  	0     0
 tmpfs	 /tmp 	     tmpfs   defaults	0     0
 sysfs	 /sys	     sysfs   defaults 	0     0 
 tmpfs	 /dev	     tmpfs   defaults	0     0	

2. /etc/init.d/rcS

#!/bin/sh
ifconfig eth0 192.168.0.1
ifconfig lo 127.0.0.1

mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

3. /etc/inittab

::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

4. /etc/profile

# /etc/profile: system-wide .profile file for the Bourne shells

echo
echo -n "Processing /etc/profile... "
# no-op
echo "Done"
echo

5. medv是init进程来启动的,再使用mdev构造/dev之前至少要用到设备文件/dev/console和/dev/null。
可以使用下面两条命令创建:

sudo mknod console c 5 1
sudo mknod null c 1 3 


创建IMG文件

dd if=/dev/zero of=rootfs.img bs=1k count=8192
/sbin/mkfs.ext2 rootfs.img
mkdir temp
mount rootfs.img temp/ -o loop
cp rootfs/* temp/. -fr
df -h
du -sh
umount temp

添加所需的链接库:

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]

所以rootfs如果要跑起来必须需要上面的三个库。


动态链接库使用注意

这是我使用的arm-linux toolchain 是4.3.2,因为我之前给rootfs的动态链接库的版本比较老,当我移植qt时,回出现一些莫名其妙的错误。我估计是应为链接库的问题。
最近只要我以更改ld-linux.so.3或ld-linux.so.2和libc.so.6就出现:

“Kernel panic - not syncing: Attempted to kill init!”

然后rootfs就没有启动起来。
之前我使用的是usr/local/arm/4.3.2/arm-non-linux-gnueabi/libc/lib下的*.so文件。
后来才发现使用usr/local/arm/4.3.2/arm-non-linux-gnueabi/libc/armv4t/lib下的文件,就没有问题了。

为了减少运行时库的大小,我们应该使用交叉编译版本即arm-linux-gcc 的strip工具来处理根文件系统的库文件,把二进制文件中的包含的符号表和调试信息删除掉。例:

arm-linux-strip *.s
阅读(1094) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~