Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15358527
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: 嵌入式

2009-08-04 16:23:32

浅析最精简的配置使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

阅读(2301) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~