Linux移植之驱动编译出现的问题

来源:互联网 发布:知乎践踏人间一切法律 编辑:程序博客网 时间:2024/05/22 15:39

近期搞Linux移植,出现了很多不可预知的问题。后来在师父及其客服的帮助下,完美解决,没辜负我这几天的辛勤努力!我的内核是Linux-2.6.30.4,以EmbedSky_hello.c为例。

  我是根据Linux移植手册一步步移植的,以下是我出现的问题:

  问题1:在编译驱动模块时出现以下错误提示:
 GZIP    kernel/config_data.gz
  IKCFG   kernel/config_data.h
  CC  kernel/configs.o
make[3]: *** No rule to make target `net/ipv4/netfilter/ipt_ECN.c', needed by `net/ipv4/netfilter/ipt_ECN.o'.  Stop.
make[2]: *** [net/ipv4/netfilter] Error 2
make[1]: *** [net/ipv4] Error 2
make: *** [net] Error 2

  解决办法:本来移植手册里的选项如下所示:

    图片

    我们仅需要添加这么多选项就够了,别的全部去除,但是里面有个默认选项不能去除,否则会出现编译内核镜像不成功的情况。

    

    如果不选这个默认选项,编译内核镜像时出现以下问题:

 drivers/net/dm9000.c: In function 'dm9000_probe':
 drivers/net/dm9000.c:1356: error: 'struct net_device' has no member named 'open'
 drivers/net/dm9000.c:1357: error: 'struct net_device' has no member named 'hard_start_xmit'
 drivers/net/dm9000.c:1358: error: 'struct net_device' has no member named 'tx_timeout'
 drivers/net/dm9000.c:1360: error: 'struct net_device' has no member named 'stop'
 drivers/net/dm9000.c:1361: error: 'struct net_device' has no member named 'set_multicast_list'
 drivers/net/dm9000.c:1363: error: 'struct net_device' has no member named 'do_ioctl'
 make[2]: *** [drivers/net/dm9000.o] Error 1
 make[1]: *** [drivers/net] Error 2
 make: *** [drivers] Error 2
 所以一定要加哦!

    现在我用make modules编译驱动,出现以下问题:

  make[1]: *** No rule to make target `|', needed by `firmware/dabusb/firmware.fw'.  Stop.
  make: *** [modules] Error 2

    从网上搜了一下,用make M=drivers/char modules编译模块,成功生成.ko文件。那个开心

    问题2:我用insmod  EmbedSky_hello.c来加载模块,出现以下问题: 
  EmbedSky_hello: version magic '2.6.30.4EmbedSky mod_unload ARMv4 ' should be '2.
  6.30.4-EmbedSky mod_unload ARMv4 '
  insmod: cannot insert 'EmbedSky_hello.ko': invalid module format

  一看就知道是版本问题,然后make menuconfig进入内核配置,

  General setup——>()Local version-append to kernel release,配置成(-EmbedSky)Local version-append to kernel release,就OK啦~

  重新编译内核,驱动模块,将EmbedSky_hello.ko放到开发板中,重新加载insmod EmbedSky_hello.ko,又出现问题了:

  EmbedSky_hello: Unknown symbol __aeabi_unwind_cpp_pr0
insmod: cannot insert 'EmbedSky_hello.ko': unknown symbol in module, or unknown
parameter

  我相当郁闷了,通过客服,刚开始以为是交叉编译器的问题,可是测试后交叉编译器是正常的,快崩溃了,最后才知道,是我的开发板里烧的是光盘提供给的镜像,而我自己移植的驱动是在我自己编写的内核里生成.ko文件,导致了致命的错误,模块和内核镜像不匹配,后来烧入我自己的内核和文件系统,虽然其中经历了多番波折,总算守得云开见月明了,终于可以加载和卸载模块了!

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高三的孩子厌学怎么办 二年级小孩学习笨怎么办 孩子高二不想上怎么办 高三孩子玩手机怎么办 孩子考试粗心丢题怎么办 工作中总出错是怎么办 工作上做错事了怎么办 惹她不开心了怎么办 惹到别人不开心怎么办 孩子高三不愿意写作业怎么办? 小孩特别懒不爱学习怎么办 小孩上三年级不爱学习怎么办 一年级孩子做题粗心怎么办 一年级的孩子做题粗心怎么办 一年级娃娃做题粗心怎么办 有同学抄作业该怎么办 同学要抄我作业怎么办 同桌抄我作业我该怎么办 孩子想换同桌老师不同意怎么办 尴尬的事情心里难受怎么办 孩子撒谎不完成作业怎么办 孩子撒谎不交作业怎么办 孩子不爱写作业撒谎怎么办 大便又粗又硬怎么办 二年级末考紧张怎么办 孩子粗心做数学题老出错怎么办 生地会考考了140怎么办 数学成绩考砸了怎么办? 考砸了家长发火怎么办 大型考试考砸了怎么办 能力考试考砸了怎么办 考砸了老师批评怎么办 英语抽测考砸了老师怎么办? 辅导班学生考砸了老师怎么办 好学生考砸了怎么办? 孩子学习不认真马虎怎么办 孩子做作业不认真马虎怎么办 一年级小孩学习不认真怎么办 孩子做题审题不认真怎么办 初二孩子不认真审题怎么办 孩子总是粗心抄错题看错题怎么办