- www.busybox.net 下载BusyBox软件对Linux根文件系统进行功能裁减
- 需要使用 mkcramfs、genromfs 等工具产生烧写映象文件;
- 具体请参见«嵌入式Linux.doc»P111
首先恢复默认配置,然后在默认配置的基础上根据需要更改busybox的配置
make defconfig
make menuconfig
要选择Shells里面的ash(图7-2-1)以及Init utilities里面的init(图7-2-2)
第一项:Busybox Setting----->build option-->
[ ] Build BusyBox as a static binary (no shared libs)
[*] Build shared libbusybox
[*] Produce a binary for each applet, linked against libbusybox
[*] Produce additional busybox binary linked against libbusybox
[ ] Build with Large File Support (for accessing files > 2 GB)
第二项:Busybox Setting----->installation option-->
[*] Don't use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
第三项:Busybox Setting----->Busybox Library Tuning -->
(6) Minimum password length
(2) MD5: Trade Bytes for Speed
[*] Faster /proc scanning code (+100 bytes)
[*] Support for /etc/networks
[*] Command line editing
(1024) Maximum length of input
[*] Additional editing keys
[*] vi-style line editing commands
(15) History size
[ ] History saving
[*] Tab completion
[*] Username completion
[*] Fancy shell prompts
(4) Copy buffer size, in kilobytes
[ ] Use clock_gettime(CLOCK_MONOTONIC) syscall
[*] Use ioctl names rather than hex values in error messages
第四项:Linux Module Utilities --->
[*] insmod
[*] Enable load map (-m) option
[*] Symbols in load map
[*] rmmod
[*] lsmod
[*] lsmod pretty output for 2.6.x Linux kernels
[*] modprobe
[ ] Multiple options parsing
[ ] Fancy alias parsing
Options common to multiple modutils
[ ] Support tainted module checking with new kernels
[ ] Support version 2.2.x to 2.4.x Linux kernels
[*] Support version 2.6.x Linux kernels
其他的Busybox选项采用默认设置,配置完成后,保存退出。
编译busybox
安装BusyBox中的工具到根文件系统
busybox编译成功以后,将其编译生成的命令工具安装到根文件系统中:
make CONFIG_PREFIX=/home/rootfs install
安装完成后会在/home/rootfs目录下生成linuxrc文件还有其他可执行文件。
修改bin/busybox
的属性
cd /home/rootfs/bin
chmod 4755 busybox
复制常用的库文件到/rootfs/lib/目录下
拷下面列示的一些库文件及相应的符号链接,将这些库文件拷贝到~//rootfs/lib目录下,注意复制的时候要用 -a参数,以拷贝符号链接
libstdc++.la ld-linux.so.2 ld-2.3.2.so libc.so.6 libc-2.3.2.so
libz.so.1 libz.so.1.2.3.3 libgcc_s.so libgcc_s.so.1
libpthread.so.0 libpthread-0.10.so libcrypt.so libcrypt.so.1
libcrypt-2.3.2.so libdl.so libdl.so.2 libdl-2.3.2.so libm.so libm.so.6 libm-2.3.2.so
libutil.so libutil.so.1 libutil-2.3.2.so libstdc++.so
libstdc++.so.6 libstdc++.so.6.0.8 librt.so librt.so.1 librt-2.3.2.so
至此,根文件系统创建成功。在以后的开发过程中可能还会需要添加别的库文件
交叉编译
通常情况下,一种编译器编译出来的可执行文件只能在在当前编译器所处的硬件架构中运行
交叉编译器的出现是为了解决跨平台编译的问题
交叉编译资源一般放在SDK的tools目录,文件名一般为:arm-linux-gcc.tar.gz;
一般在tools/bin目录下会有自动安装的脚本
crosstool 具移植性,其所构建的交叉工具链可执行在 Linux、Mac OS X、Solaris 和 Cygwin 之上
具体构建过程参见,«嵌入式Linux.doc»P60;
# (1)所需软件准备(crosstool需要许多压缩包)
将所有软件置于/home/source/,解压crosstool并进入解压后的目录
# (2)修改
demo-arm.sh
TARBALLS_DIR=/home/source
RESULT_TOP=/home/crosstool第二处:
#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest
echo Done.
gcc-4.1.1-glibc-2.3.2.dat
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.1
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.24
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5
arm.dat
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux
TARGET_CFLAGS="-O"
all.sh
#case x$USER in
#xroot) abort "Don't run all.sh or crosstool.sh as root, it's dangerous" ;;
#*) ;;
#esac
# glibc-2.3.2/csu/Makefile
# 解压source目录下的glibc-2.3.2.tar.bz2,修改Makefile2处echo(225行):
echo "\"Compiled on a $$os $$version system" \
"on `date +%Y-%m-%d`.\\\\n\"" ;; \→
echo "\"Available extensions:\\\\n\"";→ \
# glibc-2.3.2重新压缩为glibc-2.3.2.tar.bz2 ,覆盖原来的glibc-2.3.2.tar.bz2:
# 执行demo-arm.sh:(./demo-arm.sh.它会自动编译)
TFTP
TFTP协议它可以看作是一个FTP协议的简化版本.传输速度快,可以通过防火墙
TFTP 后台程序放在 /usr/sbin/in.tftp,TFTP 分为客户端和服务器端两种
查询 TFTP 程序安装与否 rpm -q tftp-server
大多数Linux是关闭 TFTP 的,编辑 /etc/xinetd.tftp 移除 disable=yes
- 首先在宿主机上安装并开启TFTP服务器端服务,并设置好TFTP根目录(供客户端下载的文件)
- 在目标机上开启TFTP客户端,把目标机与宿主机相连,配置好IP等网络参数
- 安装几个必要的程序
sudo apt-get install tftpd tftp xinetd
注意: linux下 inetd ,xinetd,tftp,tftpd 服务都是禁用的,要修改文件来启动他们
在 /etc/xinetd.d
下建立一个配置文件tftp
minicom
串口COM1对应ttyS0, COM2对应ttyS1
sudo apt-get install minicom
sudo minicom
用串口线将宿主机和目标机相连,如果此时目标机向宿主机发送数据,就会在minicom中显示