天天看點

busybox-1.20.0編譯,解決無flash_eraseall指令的問題

開發環境:
1. 開發主機: Ubuntu 9.10
2. 交叉編譯器: gcc version 3.4.5
3. 開發闆: JZ2440-V3

背景: 在做Nor驅動開發,測試驅動時,提示找不到flash_eraseall指令。故需要編譯生成該指令。
由于開發闆自帶的是busybox-1.7.0,無flash_eraseall指令,需下載下傳較新的版本。筆者這裡用的
是busybox-1.20.0.

1. 解壓縮.
# tar jxvf busybox-1.20.0.tar.bz2

2. 配置(做如下配置,儲存退出).
# cd busybox-1.20.0
# make menuconfig
  -> Busybox Settings
    -> Build Options
    [*] Build BusyBox as a static binary (no shared libs)
  -> Miscellaneous Utilities
    [*] flash_eraseall

3. 設定交叉編譯器.
# vi Makefile
  CROSS_COMPILE ?= arm-linux-

4. 編譯.
# make

5. 安裝.
# mkdir ../busybox_1.20.0_install
# make CONFIG_PREFIX=../busybox_1.20.0_install install

6. 替換可執行檔案(替換目錄下檔案,不是替換目錄).
6.1 busybox_1.20.0_install/bin/ 替換掉 /work/nfs_root/first_fs/bin/
6.2 busybox_1.20.0_install/sbin/ 替換掉 /work/nfs_root/first_fs/sbin/
6.3 busybox_1.20.0_install/usr/bin/ 替換掉 /work/nfs_root/first_fs/usr/bin/
6.4 busybox_1.20.0_install/usr/sbin/ 替換掉 /work/nfs_root/first_fs/usr/sbin/

7. 編譯問題:
7.1. SYS_ioprio_set及SYS_ioprio_get未定義?
miscutils/ionice.c: In function `ioprio_set':
miscutils/ionice.c:23: error: `SYS_ioprio_set' undeclared (first use in this function)
miscutils/ionice.c:23: error: (Each undeclared identifier is reported only once
miscutils/ionice.c:23: error: for each function it appears in.)
miscutils/ionice.c: In function `ioprio_get':
miscutils/ionice.c:28: error: `SYS_ioprio_get' undeclared (first use in this function)

解決:
miscutils/ionice.c 添加如下行
#define __NR_ioprio_set	289
#define __NR_ioprio_get	290

#define SYS_ioprio_set	__NR_ioprio_set
#define SYS_ioprio_get	__NR_ioprio_get

7.2. 缺少頭檔案?
miscutils/nandwrite.c:49:26: mtd/mtd-user.h: No such file or directory
miscutils/nandwrite.c:62: warning: "struct mtd_info_user" declared inside parameter list
miscutils/nandwrite.c:62: warning: its scope is only this definition or declaration, which is probably not what you want
miscutils/nandwrite.c: In function `dump_bad':
miscutils/nandwrite.c:64: error: dereferencing pointer to incomplete type
miscutils/nandwrite.c:68: error: dereferencing pointer to incomplete type
miscutils/nandwrite.c:71: error: dereferencing pointer to incomplete type
miscutils/nandwrite.c:72: error: dereferencing pointer to incomplete type
miscutils/nandwrite.c:74: error: dereferencing pointer to incomplete type
miscutils/nandwrite.c:64: warning: unused variable `buf'
miscutils/nandwrite.c: At top level:
miscutils/nandwrite.c:79: warning: "struct mtd_info_user" declared inside parameter list
miscutils/nandwrite.c: In function `next_good_eraseblock':
miscutils/nandwrite.c:84: error: dereferencing pointer to incomplete type
miscutils/nandwrite.c:90: error: `MEMGETBADBLOCK' undeclared (first use in this function)
miscutils/nandwrite.c:90: error: (Each undeclared identifier is reported only once
miscutils/nandwrite.c:90: error: for each function it appears in.)
miscutils/nandwrite.c:95: error: dereferencing pointer to incomplete type
miscutils/nandwrite.c: In function `nandwrite_main':
miscutils/nandwrite.c:109: error: storage size of 'meminfo' isn't known
miscutils/nandwrite.c:110: error: storage size of 'oob' isn't known
miscutils/nandwrite.c:133: error: `MEMGETINFO' undeclared (first use in this function)
miscutils/nandwrite.c:216: error: `MEMREADOOB' undeclared (first use in this function)
miscutils/nandwrite.c:109: warning: unused variable `meminfo'
miscutils/nandwrite.c:110: warning: unused variable `oob'

解決:cp /usr/include/mtd/mtd-user.h include/mtd/mtd-user.h
      cp /usr/include/mtd/ubi-user.h include/mtd/ubi-user.h
           

繼續閱讀