[经验] 给BBB换内核---不用刷机

airqj   2013-12-31 22:08 楼主
放假回家打算重新复习一下linux下的驱动开发,开发驱动就得先编译一下内核源码。
于是为了偷懒上网找了个别人写好脚本打好补丁的BBB内核源码http://the8thlayerof.net/2013/10/16/beagle-bone-black-notes-how-to-build-a-kernel-for-a-beagle-bone-black-from-scratch-part-1/ ,将内核编译好,自己写了一个hello world的驱动程序,弄到了BBB上insmod,于是出现了今天的主角---Invaild module format


这种情况的原因一般是编译驱动时用的内核和开发板上的内核版本不一样。参见http://blog.csdn.net/zhenxisuiyuan/article/details/5570490
但是人家说要重新编译内核,我哪甘心重新编译?明明已经编译好了一个,编译好的直接代替不就行了。。。
于是拿出当年折腾gentoo的精神。。。。
BBB的启动内核是/boot/uimage,而编译生成的内核文件是3.8.13-beaglebone-zImage.uImage是
uboot的专用内核格式,只需要将zImage转换为uImage即可-是用mkimage命令,这个可以在uboot/tool下找到
转换命令mkimage -A arm -O linux -T kernel -C none -a 0x80007fc0 -e 0x80008000 -n Angstrom/3.8.13/beaglebone -d 3.8.13-bone33.1.zImage uImage-3.8.13
然后将uImage-3.8.13放到/boot/下,将/boot目录下的相关文件修改即可。编译内核的时候还会在deploy目录下生成几个压缩文件,将其解压到相应的目录即可

mkimage 的参数可以参考未修改之前的uboot的启动时打印的信息
## Booting kernel from Legacy Image at 80007fc0 ...                             
   Image Name:   Angstrom/3.8.13/beaglebone                                    
   Image Type:   ARM Linux Kernel Image (uncompressed)                          
   Data Size:    3361616 Bytes = 3.2 MiB                                       
   Load Address: 80007fc0                                                      
   Entry Point:  80008000                                                      
   Verifying Checksum ... OK                                                   
## Flattened Device Tree blob at 80f80000                                       
   Booting using the fdt blob at 0x80f80000                                    
   XIP Kernel Image ... OK                                                      
OK                                                                              
   Using Device Tree in place at 80f80000, end 80f89133                        

Starting kernel ...   

之后将模块insmod后dmesg | tail,一切正常。。。。

回复评论 (9)

楼主 有一个问题  我的beaglebone  black板子上的内核版本是3.8.13   就直接使用tftp上启动   uboot部分还是3.8.13内核专用的   想把内核版本改成3.2.0  有办法吗
点赞  2014-1-10 10:41
引用: wk123 发表于 2014-1-10 10:41
楼主 有一个问题  我的beaglebone  black板子上的内核版本是3.8.13   就直接使用tftp上启动   uboot部分还 ...

编译内核后下载不就行了?
点赞  2014-1-11 13:06
表示我直接将uImage替换之后,失败了,无法启动了
点赞  2014-2-7 17:49
呵呵 不会吧 提示什么信息
生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙 =================================== 做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
点赞  2014-2-7 17:53
引用: chenzhufly 发表于 2014-2-7 17:53 呵呵 不会吧 提示什么信息
就直接停在u-boot了 Hit any key to stop autoboot: 0 gpio: pin 53 (gpio 53) value is 1 Card did not respond to voltage select! mmc0(part 0) is current device mmc_send_cmd : timeout: No status update Card did not respond to voltage select! No micro SD card found, setting mmcdev to 1 mmc_send_cmd : timeout: No status update mmc1(part 0) is current device gpio: pin 54 (gpio 54) value is 1 SD/MMC found on device 1 reading uEnv.txt 26 bytes read in 3 ms (7.8 KiB/s) Loaded environment from uEnv.txt Importing environment from mmc ... gpio: pin 55 (gpio 55) value is 1 U-Boot# 四个User Led也只亮了前三个。 本帖最后由 651927693 于 2014-2-7 18:28 编辑
点赞  2014-2-7 18:24
观摩学习中
点赞  2014-2-12 20:23
引用: 651927693 发表于 2014-2-7 18:24
就直接停在u-boot了
Hit any key to stop autoboot:  0                                             ...

你这个根本没有下载进去的。。。。而且替换之后把编译出来的dtb(好像是这个)文件,还有fireware文件夹也得替换掉....

就记得这么多了,这段时间没时间折腾了,温饱问题还没解决
点赞  2014-2-12 22:35
就是要替换uImage, 设备树文件?fireware文件是什么?我回去看看
点赞  2014-2-19 19:46
LZ可不可以写的在明白点,本人小白初学Linux驱动,insmod也是出现版本不对的情况,也想换内核,
点赞  2015-12-21 16:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复