Chinaunix首页 | 论坛 | 博客
  • 博客访问: 434943
  • 博文数量: 111
  • 博客积分: 4290
  • 博客等级: 上校
  • 技术积分: 1301
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 14:22
个人简介

努力工作,建立一个幸福的家庭。

文章分类

全部博文(111)

文章存档

2015年(4)

2013年(9)

2012年(6)

2011年(17)

2010年(69)

2009年(6)

分类: LINUX

2010-05-22 15:51:41

内核编译成功,现在分享一下成功的喜悦以及坎坷的经历。

需要写一个驱动,由于开发板上烧录的是买时带着的镜像,无法在PC上搭建编译内核模块的环境,因为没有开发板的内核信息。于是我开始想自己编译内核。首先迅速搭建arm-linux-环境,我开始用的是crosstools_3.4.5_softfloat。
接下来配置环境变量,
$sudo gedit /etc/profile  
在最后添加一行,
export PATH=$PATH:/usr/local/arm-linux/4.3.3/bin/:保存退出
输入$arm-(tab)  出现arm-linux链
环境搭建成功
再次解压内核我的内核版本是linux-2.6.30.4
开始内核编译,首先$make menuconfig
出错:很失败,之前的错误原因忘了记录。只能凭着回忆了。解决方法是安装libncurses5-dev
接着make bzlmage
出错:
kernel/built-in.o(.text+0x7340): In function `sched_create_group':
kernel/sched.c:9406: undefined reference to `.L3576'
make: *** [.tmp_vmlinux1] 错误 1
找了大量资料没有找出个所以然来,把编译器换成4.4.3后解决问题。


在make modules中出现一下错误:
CC [M]  drivers/media/video/em28xx/em28xx-audio.o
drivers/media/video/em28xx/em28xx-audio.c: In function 'em28xx_audio_init':
drivers/media/video/em28xx/em28xx-audio.c:466: error: implicit declaration of function 'snd_card_create'
make[4]: *** [drivers/media/video/em28xx/em28xx-audio.o] 错误 1
make[3]: *** [drivers/media/video/em28xx] 错误 2
make[2]: *** [drivers/media/video] 错误 2
make[1]: *** [drivers/media] 错误 2
make: *** [drivers] 错误 2
解决方法:在make menuconfig时去掉em28xx

net/ipv4/netfilter/ipt_ecn.c:99: error: 'IPT_ECN_OP_MATCH_CWR' undeclared (first use in this function)
net/ipv4/netfilter/ipt_ecn.c: At top level:
net/ipv4/netfilter/ipt_ecn.c:113: error: invalid application of 'sizeof' to incomplete type 'struct ipt_ecn_info'
make[3]: *** [net/ipv4/netfilter/ipt_ecn.o] 错误 1
make[2]: *** [net/ipv4/netfilter] 错误 2
make[1]: *** [net/ipv4] 错误 2
make: *** [net] 错误 2
解决方法:在make menuconfig中精简network support



ERROR: "ioport_map" [drivers/net/wireless/orinoco/spectrum_cs.ko] undefined!
ERROR: "ioport_unmap" [drivers/net/wireless/orinoco/spectrum_cs.ko] undefined!
ERROR: "ioport_map" [drivers/net/wireless/orinoco/orinoco_cs.ko] undefined!
ERROR: "ioport_unmap" [drivers/net/wireless/orinoco/orinoco_cs.ko] undefined!
ERROR: "ioport_unmap" [drivers/net/wireless/libertas/libertas_cs.ko] undefined!
ERROR: "ioport_map" [drivers/net/wireless/libertas/libertas_cs.ko] undefined!
ERROR: "__bad_udelay" [drivers/isdn/hisax/hisax.ko] undefined!
ERROR: "ioport_map" [drivers/char/tpm/tpm_atmel.ko] undefined!
make[1]: *** [__modpost] 错误 1
make: *** [modules] 错误 2
解决方法:1修改wireless配置2去掉tmp支持

在make modules install中权限出现问题,开始还以为,/lib/modules/2.6.30.4是相对路径在源码文件夹下,狂汗,犯这种低级错误,结果chmod 777后 怎么也找不到出错原因。后来在makefile中找到_modinst_
添加一句@echo "ln -s $(srctree) $(MODLIB)/build"才了解,驱动真正的去向。

末了说一句编译内核是一个体力活。
阅读(5392) | 评论(0) | 转发(0) |
0

上一篇:ARMA模型

下一篇:如果,你到了25岁

给主人留下些什么吧!~~