Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103691744
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-04-14 15:40:28

作者: Sednol  出自:
如何配置并编译可以在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
阅读(358) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~