浅析最精简的配置使2.6.30.4内核在arm开发板上的shell正常运行1.下载
luther@gliethttp:~$ wget
2.解压,然后配置
luther@gliethttp:~$ tar jxvf busybox-1.14.3.tar.bz2
luther@gliethttp:~/busybox-1.14.3$ make menuconfig
选择"Busybox Settings" ==> "Build Options" ==>可以选择静态编译busybox,也可以不用,
但是为了让单一的busybox运行起来,我们还是选择上静态编译吧,生成大小1.7M.[luther.gliethttp]选择"Cross Compiler prefix"输入
arm-linux-交叉编译器[我使用的是arm-linux-gcc 3.4.1]
选择"Additional CFLAGS"输入如下一行参数(该行参数来源于2.6.30.4内核)
-DSYS_ioprio_get=0x90013b -DSYS_ioprio_set=0x90013a -DARPHRD_INFINIBAND=32 -DEV_SW=0x05 -DSW_LID=0x00选择"Busybox Settings" ==> "Installation Options"选中"[*] Don't use /usr"
好了退出保存就ok了.
3.修改__user定义问题
luther@gliethttp:~/busybox-1.14.3$ vim util-linux/mkfs_vfat.c
在第13﹑14行之间定义加入如下语句
#include
/* HDIO_GETGEO */
#define __user
#include /* FDGETPRM */
4.好了,所有工作都完成了,可以执行编译了
luther@gliethttp:~/busybox-1.14.3$ make -j4
luther@gliethttp:~/busybox-1.14.3$ file busybox
busybox: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.4.3, dynamically linked (uses shared libs), stripped
luther@gliethttp:~/busybox-1.14.3$ ll busybox
-rwxr-xr-x 1 luther luther 832K 2009-08-04 15:56 busybox
自动建立链接bin文件
luther@gliethttp:~/busybox-1.14.3$ make
install CONFIG_PREFIX="/home/luther/gliethttp_busybox" // 来直接指定busybox的安装路径
或者
luther@gliethttp:~/busybox-1.14.3$ make install // 这样所有bin文件都将被安装到_install文件夹下
luther@gliethttp:~/busybox-1.14.3$ ll _install/
total 8.0K
drwxr-xr-x 2 luther luther 4.0K 2009-08-04 15:58 sbin
lrwxrwxrwx 1 luther luther 11 2009-08-04 15:58 linuxrc -> bin/busybox
drwxr-xr-x 2 luther luther 4.0K 2009-08-04 15:58 bin
luther@gliethttp:~/busybox-1.14.3$
然后在ep9312内核运行起来之后,执行
./busybox --install -s // 将程序拷贝到/usr/bin下同时创建符号链接
或者
./busybox --install // 将直接生成可执行文件,而不是符号链接.
如果开发板上原有的/usb/bin /sbin/目录下的内容不希望替换的话,那么需要修改源码
static void install_links(const char *busybox, int use_symbolic_links)
{
/* directory table
* this should be consistent w/ the enum,
* busybox.h::bb_install_loc_t, or else... */
static const char usr_bin [] ALIGN1 = "gliethttp/bin";
static const char usr_sbin[] ALIGN1 = "gliethttp/sbin";
static const char *const install_dir[] = {
&usr_bin [13], /* "", equivalent to "/" for concat_path_file() */
&usr_bin [0], /* "/bin" */
&usr_sbin[0], /* "/sbin" */
usr_bin,
usr_sbin
};
这样busybox将所有bin程序安装到开发板的gliethttp/bin/目录和gliethttp/sbin/目录[luther.gliethttp]
第2步中使用到的参数原始定义如下:
#define __NR_OABI_SYSCALL_BASE 0x900000 // 来自linux-2.6.30.4/arch/arm/include/asm/unistd.h
#define __NR_ioprio_set (__NR_SYSCALL_BASE+314) // 0x90013a
#define __NR_ioprio_get (__NR_SYSCALL_BASE+315) // 0x90013b
#define SYS_ioprio_get __NR_ioprio_get // 来自/usr/include/bits/syscall.h
#define SYS_ioprio_set __NR_ioprio_set
#define ARPHRD_INFINIBAND 32 // 来自/usr/include和linux-2.6.30.4/include/linux/if_arp.h
#define EV_SW 0x05 // 来自/usr/include/linux/input.h和linux-2.6.30.4/include/linux/input.h
#define SW_LID 0x00 // 来自/usr/include/linux/input.h和linux-2.6.30.4/include/linux/input.h
#define __user // 用于util-linux/mkfs_vfat.c
阅读(2340) | 评论(0) | 转发(0) |