作者shihyu (shihyu)
看板LinuxDev
标题Re: [问题] 怎麽用raspberry pi学kernel or driver
时间Sat Mar 29 18:43:40 2014
※ 引述《jimmytzeng (jimmytseng)》之铭言:
: ※ 引述《shihyu (shihyu)》之铭言:
: : 我最近买块raspberry pi , 不过目前只会烧录image 到sd card
: : 网路上找资料都偏应用程式, 不知道怎麽用raspberry pi 学kernel or driver?
: : 想请问一下应该要怎麽学? 有相关资料可以参考?
: : 谢谢
: 看来你是想透过raspberry pi去学embedded linux ?
: 那我推荐你几个步骤
: 1. 学会使用cross compile toolchains。用交叉编译出helloworld.ko,放在raspberry上载入此模组,有成功就代表你跨入第一步
: 2. 学会设定kernel的组态档(make config/menuconfig),并不是说去了解kernel每个设定是在干嘛,然後自行去挑选设定,
: 来达到kernel的最佳化,有能力这样干的人,不是狂热分子就是在卖产品的公司了,你要找的是,依造需求看哪个kernel版本
: 适合raspberry pi或BCM2835这个chip、看有没有高手分享raspberry的kernel组态档、你要写的driver,kernel有没有支援
: 或是说有没有把相关设定打开
: 3. 交叉编译kernel (编译一次时间满久的)
: 4. driver有很多种,透过linux提供的API内去驱动硬体也是driver,直接去读写硬体的register达到驱动硬体也是driver
: 推荐你先从bootloader(推荐u-boot)下手,因为从bootloader的code去了解怎样从基本I/O或是一些interface去驱动硬体
: 可以避免阅读有OS架构的driver来搞混你(此步骤请搭配硬体spec效果更好)
: 5. 再来就是透过linux的规范去写出在linux跑的driver,这就要看满大量的文件了,你可以从外接I2C或是GPIO的装置
: 开始下手,关於这个网路上也满多教学 (推荐去买个I2C介面的RTC回来写driver)
_________________________________________________________________________
目前尝试cross compile 编译出hello.ko
可是放到板子上出现下面错误
pi@raspberrypi:~$ sudo insmod hello.ko
Error: could not insert module hello.ko: Invalid module format
我装的是Raspbian 最新版本 kernel 是 3.10.25+
pi@raspberrypi:~$ uname -r
3.10.25+
我下载
https://github.com/raspberrypi/linux Makefile Linux 3.10.34
这样 3.10.34 跟 3.10.25+ 差异是造成Invalid module format 原因吗?
因为我网站kernel source code 只看到3.10.34 没有 3.10.25
那我.config 是从板子下载config.gz 设定後编译这样应该不是这问题
请问这我应该怎麽解决Invalid module format 问题
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.204.6.127
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1396089824.A.970.html
1F:→ mshockwave:kenel版本最好一样 03/29 21:05
2F:→ shihyu:嗯..我不太懂为什麽他image是3.10.25 ,可是他github没有 03/29 22:37
3F:→ shihyu:这版本的source code ,这边我直接去下载linux kernel 官方 03/29 22:38
4F:→ shihyu:的3.10.25 这样可以吗? 03/29 22:38
5F:→ shihyu:我刚刚下载linux kernel 3.10.25 编译出hello.ko 03/29 23:23
6F:→ shihyu:同样出现一样错误讯息XD..这样还有什麽可能原因造成? 03/29 23:24
7F:→ shihyu:发现一个问题,我用rpi官方tools编译编译出来的hello.ko 03/30 00:17
8F:→ shihyu:modinfo 发现是ARMv7 p2v8 ,在板子系统是--with-arch=armv6 03/30 00:19
9F:→ shihyu:为什麽有这样差异XD..是我哪边搞错还是? 03/30 00:19
10F:→ shihyu:搞定~要升级kernel 到3.10.34 XD 03/30 01:54