開發環境:
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