全部博文(13)
分类: LINUX
2008-04-13 22:16:12
Ubuntu7.10系统下使用arm linux Gcc4.1.1交叉编译工具编译为s3c2410板编译linux2.6.24内核
在前一篇文章中我介绍了如何使用crosstool-0.43建立Gcc4.1.1的arm linux交叉编译环境。这里介绍如何配置并编译可以在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 ./.config
make menuconfig
如果有以下错误出现,请输入以下命令:
sudo apt-get install libncurses5-dev
HOSTCC scripts/kconfig/lxdialog/checklist.o
在包含自 scripts/kconfig/lxdialog/checklist.c:24 的文件中:
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