如何配置并编译可以在ARM9 下运行的linux内核。
1.修改Makefile
cd crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/linux-2.6.24
我在建立交叉编译工具时crosstool-0,43 将linux-2,6.24解压到这个目录下了,你可以选择把内核放在其他目录下。进入liunx-2.6.24目录
修改Makefile
.在Makefile中找到下面这一行:
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc64/powerpc/ )
前每句前加#,将它注销掉。
#SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
# -e s/arm.*/arm/ -e s/sa110/arm/ \
# -e s/s390x/s390/ -e s/parisc64/parisc/ \
# -e s/ppc64/powerpc/ )
.找到下列行:
ARCH?=$(SUBARCH)
CROSS_COMPILE ?=
改成:
ARCH := arm
CROSS_COMPILE :=arm-9tdmi-linux-gnu-
注:这里的CROSS_COMPILE就是让你指定交叉编译器的路径,如果你设置好了PATH那么直接把这句加上就可以,若没有那么请指定路径,arm- unknown-linux-gnu 是我编译的交叉工具名称,如果你指定的编译工具叫arm-linux 那么CROSS_COMPILE:=arm-linux-。
2.内核配置
从arch/arm/configs 中拷贝一份 s3c2410_defconfig 到linux-2.6.24目录下并改为 config
cp arch/arm/configs/s3c2410_defconfig ./.conf
make menuconfig
如果有以下错误出现,请输入以下命令:
scripts/kconfig/lxdialog/dialog.h:32:20: 错误: curses.h:No such file or directory
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:97: 错误: expected specifier-qualifier-list before ‘chtype’
scripts/kconfig/lxdialog/dialog.h:187: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:194: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:196: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:197: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:198: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:199: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:201: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:31: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:59: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:95: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c: 在函数 ‘dialog_checklist’ 中:
scripts/kconfig/lxdialog/checklist.c:116: 错误: ‘WINDOW’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:116: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
scripts/kconfig/lxdialog/checklist.c:116: 错误:所在的函数内只报告一次。)
scripts/kconfig/lxdialog/checklist.c:116: 错误: ‘dialog’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:116: 错误: ‘list’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:116: 警告:逗号表达式的左操作数不起作用
scripts/kconfig/lxdialog/checklist.c:129: 警告: 隐式声明函数 ‘getmaxy’
scripts/kconfig/lxdialog/checklist.c:129: 错误: ‘stdscr’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:130: 错误: ‘KEY_MAX’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:131: 警告: 隐式声明函数 ‘getmaxx’
scripts/kconfig/lxdialog/checklist.c:137: 错误: ‘COLS’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:138: 错误: ‘LINES’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:140: 警告: 隐式声明函数 ‘draw_shadow’
scripts/kconfig/lxdialog/checklist.c:142: 警告: 隐式声明函数 ‘newwin’
scripts/kconfig/lxdialog/checklist.c:143: 警告: 隐式声明函数 ‘keypad’
scripts/kconfig/lxdialog/checklist.c:143: 错误: ‘TRUE’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:145: 警告: 隐式声明函数 ‘draw_box’
scripts/kconfig/lxdialog/checklist.c:146: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:146: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:147: 警告: 隐式声明函数 ‘wattrset’
scripts/kconfig/lxdialog/checklist.c:147: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:148: 警告: 隐式声明函数 ‘mvwaddch’
scripts/kconfig/lxdialog/checklist.c:150: 警告: 隐式声明函数 ‘waddch’
scripts/kconfig/lxdialog/checklist.c:151: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:154: 警告: 隐式声明函数 ‘print_title’
scripts/kconfig/lxdialog/checklist.c:156: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:157: 警告: 隐式声明函数 ‘print_autowrap’
scripts/kconfig/lxdialog/checklist.c:164: 警告: 隐式声明函数 ‘subwin’
scripts/kconfig/lxdialog/checklist.c:171: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:171: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:189: 警告: 隐式声明函数 ‘print_item’
scripts/kconfig/lxdialog/checklist.c:192: 警告: 隐式声明函数 ‘print_arrows’
scripts/kconfig/lxdialog/checklist.c:195: 警告: 隐式声明函数 ‘print_buttons’
scripts/kconfig/lxdialog/checklist.c:197: 警告: 隐式声明函数 ‘wnoutrefresh’
scripts/kconfig/lxdialog/checklist.c:199: 警告: 隐式声明函数 ‘doupdate’
scripts/kconfig/lxdialog/checklist.c:202: 警告: 隐式声明函数 ‘wgetch’
scripts/kconfig/lxdialog/checklist.c:210: 错误: ‘KEY_UP’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:210: 错误: ‘KEY_DOWN’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:220: 错误: ‘FALSE’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:221: 警告: 隐式声明函数 ‘scrollok’
scripts/kconfig/lxdialog/checklist.c:222: 警告: 隐式声明函数 ‘wscrl’
scripts/kconfig/lxdialog/checklist.c:232: 警告: 隐式声明函数 ‘wrefresh’
scripts/kconfig/lxdialog/checklist.c:293: 警告: 隐式声明函数 ‘delwin’
scripts/kconfig/lxdialog/checklist.c:297: 错误: ‘KEY_LEFT’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:298: 错误: ‘KEY_RIGHT’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:310: 警告: 隐式声明函数 ‘on_key_esc’
scripts/kconfig/lxdialog/checklist.c:312: 错误: ‘KEY_RESIZE’ 未声明 (在此函数内第一次使用)
make[1]: *** [scripts/kconfig/lxdialog/checklist.o] 错误 1
make: *** [menuconfig] 错误 2
运行成功就可以按照需要配置内核选项了,具体配置选项的作用说明稍后介绍。
这里有几个重要的地方需要注意:
System Type --> ARM system type () -->
这个地方一定要选择和你的板子相同的类型,我们针对的开发板是s3c2410这里选择s3c2410。
在内核为2.4的时候,minicom默认的串行端口为ttyS0,在2.6里为ttySAC0
所以Boot Option --> Default kernel command string里输入
console=ttySAC0,115200 (115200为波特率)
关闭console display driver support 所有相关选项否则编译出错。
配置好以后,退出保存,默认保存在.config里.
3.编译内核:
make clean
不能用make mrproper,如果使用了它,它将刚才的config清理掉
make dep
编译相关依赖文件
make zImage
最终的编译命令,有时可以直接用make(2.6.x版本以上).
最后编译好的镜像文件放在/linux-2.6.24/arch/arm/boot/zImage
1.修改Makefile
cd crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/linux-2.6.24
我在建立交叉编译工具时crosstool-0,43 将linux-2,6.24解压到这个目录下了,你可以选择把内核放在其他目录下。进入liunx-2.6.24目录
修改Makefile
.在Makefile中找到下面这一行:
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc64/powerpc/ )
前每句前加#,将它注销掉。
#SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
# -e s/arm.*/arm/ -e s/sa110/arm/ \
# -e s/s390x/s390/ -e s/parisc64/parisc/ \
# -e s/ppc64/powerpc/ )
.找到下列行:
ARCH?=$(SUBARCH)
CROSS_COMPILE ?=
改成:
ARCH := arm
CROSS_COMPILE :=arm-9tdmi-linux-gnu-
注:这里的CROSS_COMPILE就是让你指定交叉编译器的路径,如果你设置好了PATH那么直接把这句加上就可以,若没有那么请指定路径,arm- unknown-linux-gnu 是我编译的交叉工具名称,如果你指定的编译工具叫arm-linux 那么CROSS_COMPILE:=arm-linux-。
2.内核配置
从arch/arm/configs 中拷贝一份 s3c2410_defconfig 到linux-2.6.24目录下并改为 config
cp arch/arm/configs/s3c2410_defconfig ./.conf
make menuconfig
如果有以下错误出现,请输入以下命令:
sudo apt-get install libncurses5-dev
安装ncurses-devel,这个是红帽或者FC的安装程序,Ubuntu的需要安装libncurses5-dev
在包含自 scripts/kconfig/lxdialog/checklist.c:24 的文件中:
HOSTCC scripts/kconfig/lxdialog/checklist.o
scripts/kconfig/lxdialog/dialog.h:32:20: 错误: curses.h:No such file or directory
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:97: 错误: expected specifier-qualifier-list before ‘chtype’
scripts/kconfig/lxdialog/dialog.h:187: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:194: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:196: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:197: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:198: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:199: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/dialog.h:201: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:31: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:59: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c:95: 错误: expected ‘)’ before ‘*’ token
scripts/kconfig/lxdialog/checklist.c: 在函数 ‘dialog_checklist’ 中:
scripts/kconfig/lxdialog/checklist.c:116: 错误: ‘WINDOW’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:116: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
scripts/kconfig/lxdialog/checklist.c:116: 错误:所在的函数内只报告一次。)
scripts/kconfig/lxdialog/checklist.c:116: 错误: ‘dialog’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:116: 错误: ‘list’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:116: 警告:逗号表达式的左操作数不起作用
scripts/kconfig/lxdialog/checklist.c:129: 警告: 隐式声明函数 ‘getmaxy’
scripts/kconfig/lxdialog/checklist.c:129: 错误: ‘stdscr’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:130: 错误: ‘KEY_MAX’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:131: 警告: 隐式声明函数 ‘getmaxx’
scripts/kconfig/lxdialog/checklist.c:137: 错误: ‘COLS’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:138: 错误: ‘LINES’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:140: 警告: 隐式声明函数 ‘draw_shadow’
scripts/kconfig/lxdialog/checklist.c:142: 警告: 隐式声明函数 ‘newwin’
scripts/kconfig/lxdialog/checklist.c:143: 警告: 隐式声明函数 ‘keypad’
scripts/kconfig/lxdialog/checklist.c:143: 错误: ‘TRUE’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:145: 警告: 隐式声明函数 ‘draw_box’
scripts/kconfig/lxdialog/checklist.c:146: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:146: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:147: 警告: 隐式声明函数 ‘wattrset’
scripts/kconfig/lxdialog/checklist.c:147: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:148: 警告: 隐式声明函数 ‘mvwaddch’
scripts/kconfig/lxdialog/checklist.c:150: 警告: 隐式声明函数 ‘waddch’
scripts/kconfig/lxdialog/checklist.c:151: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:154: 警告: 隐式声明函数 ‘print_title’
scripts/kconfig/lxdialog/checklist.c:156: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:157: 警告: 隐式声明函数 ‘print_autowrap’
scripts/kconfig/lxdialog/checklist.c:164: 警告: 隐式声明函数 ‘subwin’
scripts/kconfig/lxdialog/checklist.c:171: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:171: 错误: ‘struct dialog_color’ 没有名为 ‘atr’ 的成员
scripts/kconfig/lxdialog/checklist.c:189: 警告: 隐式声明函数 ‘print_item’
scripts/kconfig/lxdialog/checklist.c:192: 警告: 隐式声明函数 ‘print_arrows’
scripts/kconfig/lxdialog/checklist.c:195: 警告: 隐式声明函数 ‘print_buttons’
scripts/kconfig/lxdialog/checklist.c:197: 警告: 隐式声明函数 ‘wnoutrefresh’
scripts/kconfig/lxdialog/checklist.c:199: 警告: 隐式声明函数 ‘doupdate’
scripts/kconfig/lxdialog/checklist.c:202: 警告: 隐式声明函数 ‘wgetch’
scripts/kconfig/lxdialog/checklist.c:210: 错误: ‘KEY_UP’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:210: 错误: ‘KEY_DOWN’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:220: 错误: ‘FALSE’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:221: 警告: 隐式声明函数 ‘scrollok’
scripts/kconfig/lxdialog/checklist.c:222: 警告: 隐式声明函数 ‘wscrl’
scripts/kconfig/lxdialog/checklist.c:232: 警告: 隐式声明函数 ‘wrefresh’
scripts/kconfig/lxdialog/checklist.c:293: 警告: 隐式声明函数 ‘delwin’
scripts/kconfig/lxdialog/checklist.c:297: 错误: ‘KEY_LEFT’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:298: 错误: ‘KEY_RIGHT’ 未声明 (在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:310: 警告: 隐式声明函数 ‘on_key_esc’
scripts/kconfig/lxdialog/checklist.c:312: 错误: ‘KEY_RESIZE’ 未声明 (在此函数内第一次使用)
make[1]: *** [scripts/kconfig/lxdialog/checklist.o] 错误 1
make: *** [menuconfig] 错误 2
运行成功就可以按照需要配置内核选项了,具体配置选项的作用说明稍后介绍。
这里有几个重要的地方需要注意:
System Type --> ARM system type () -->
这个地方一定要选择和你的板子相同的类型,我们针对的开发板是s3c2410这里选择s3c2410。
在内核为2.4的时候,minicom默认的串行端口为ttyS0,在2.6里为ttySAC0
所以Boot Option --> Default kernel command string里输入
console=ttySAC0,115200 (115200为波特率)
关闭console display driver support 所有相关选项否则编译出错。
配置好以后,退出保存,默认保存在.config里.
3.编译内核:
make clean
不能用make mrproper,如果使用了它,它将刚才的config清理掉
make dep
编译相关依赖文件
make zImage
最终的编译命令,有时可以直接用make(2.6.x版本以上).
最后编译好的镜像文件放在/linux-2.6.24/arch/arm/boot/zImage