关于arm内核编译(基于tq2440)的一些问题

经历了几个星期,终于把这个神奇的内核代码搞定了,并且解决了一些内核模块编译的问题。

(一)内核下载

tq2440给的官方内核印象有两个root_qtopia_2.2.0_2.6.30.4_20130330.tar、root_TQ2440_PDA_20130330.tar。

前面那个是旧得不能再旧的内核+文件,据说其运行内核模块都有点问题的。这里不想管他,不过有一点需要提到的是,这个映像是可以通过ubuntu来下载。但是后面那个(基于QT界面的PDA)如果你用ubuntu下载的话就会大感崩溃。我搞了整个星期,头都大了,都还是下载不了。首先,tq官方给出的dwn是不能在ubuntu下面使用的,必须自己上网找dwn的源码,在ubuntu下面编译一次才可以用。

具体如下:

DNW_for_linux 下载:

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

可以参考:http://blog.csdn.net/fuyoufang1/article/details/25149913

我还使用过dwn2,据说这玩意下载会更快,不过更容易出问题!

详见:http://blog.csdn.net/feixue2588/article/details/5868303

反正折腾来折腾去,就是搞不定,他是这个根文件映像下载到一半的时候突然结束,dmesg一下,发现这个驱动gg了。莫名奇妙,每次都是这样。

最后,我一个朋友说他用红帽无错下载,我立即花了几个小时装了一下红帽的虚拟机,gcc编译链什么的,这里就不详细赘述,反正红帽下载是一点问题都没有的。

(二)内核编译

内核编译问题就多了,一开始我用ubuntu下载程序下载不了,就像直接用他的内核去编译一个文件系统算了,结果编了一个星期就是不行,ubuntu是出了什么错误我就不记得了,但红帽的错误大概还记得:

./scripts/gen_initramfs_list.sh: Cannot open什么鬼的,后面跟着一串什么地址


网上找了一堆,说什么安装一下v86d就可以了,sudo apt-get install v86d

详见http://blog.csdn.net/u012509728/article/details/49336557

大佬,我的是红帽,apt是用ubuntu的,我用yum install v86d,结果一堆错,然后找了老半天都没办法安装。然后我索性就不搞内核了……

就这样又过了几个星期,我突然又很不甘心,然后又想找了一下解决方法,结果还是找回上面那个网址,发现了之前遗漏的第一条解决办法。一般来说,我们都会下意识跟着大神的建议走,他说第一条不好,那我们就不做第一条呗,结果就gg了,搞到我都不想学内核了。

但事实上并不能一言以蔽之,其实大神虽然说这一办法不好,但他放上来就是有道理的。

原来这些错误都是配置文件的锅。其实仔细想想就知道了,如果我们去编译210的内核是没有问题的,这就证明2440的内核源代码不会出错,错的肯定肯定就是tq官方给的配置文件config_file有问题。我们根据大神给出的第一个结局方案,可以找到这里:


没错,就是这玩意,他指定了一个文件系统的目录,本来是用来制作文件系统的,其实根据tq教学视频来看,目前还不需要制作文件系统,虽然不用文件系统开机会卡住(这也是大神为什么不推荐的原因),但是这就确确实实是这么回事啊。

原来说到底都是tq官方资料的锅,在内核制作的源代码里面给个文件系统的配置算什么意思?,还没教会你1+1就叫你算2*2?

去掉他,编译,完全没问题!不过注意了,去掉不是指将上面那个initial RAM取消选择,是清空下面这个initramfs source

,等你以后要加载initram文件系统的时候再把目录设置吧,不过估计也是很久远的事情了,毕竟你学的话通常都是挂载nfs文件系统,连PDA都是nfs的,nfs根本不用initial RAM……

(三)内核模块编译

好了,这个困扰我这么久的坑爹玩意搞定了,现在来编译一下内核模块爽爽……

make

……

错了!

错误信息:没有规则可以创建目标“module”

唉,我就奇怪了,我个跟视频做的一模一样,有什么理由?

找了半天:

 
 

KERNELDIR ?= /user/src/kernels/2.6.32.358.el6.x86_x64/build

cd $(KERNELDIR) && make -C $(KERNELDIR) SUBDIRS=$(PWD) modules

详见:http://www.xue163.com/2075/1/20757235.html

我说这玩意看起来怎么这么不靠谱啊,于是我回去又细细地对了了一遍makefile,才发现原来是modules,不是module!难怪报错也是报module

总之是搞定了,浑身舒爽,终于可以继续学内核了。这些细节问题也真是害死人,但说道头,终归是自己不细心的锅,比如之前内核编译的错误信息,看到那个地址就应该想到是找不到地址的原因,结果被我忽略掉了,白白浪费那么多时间。


原创文章 26 获赞 9 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_34917736/article/details/65447148