关于arm内核编译(基于tq2440)的一些问题
来源:互联网 发布:手机做淘宝客怎么注册 编辑:程序博客网 时间:2024/05/06 05:55
经历了几个星期,终于把这个神奇的内核代码搞定了,并且解决了一些内核模块编译的问题。
(一)内核下载
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 下载:
免费下载地址在
用户名与密码都是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
总之是搞定了,浑身舒爽,终于可以继续学内核了。这些细节问题也真是害死人,但说道头,终归是自己不细心的锅,比如之前内核编译的错误信息,看到那个地址就应该想到是找不到地址的原因,结果被我忽略掉了,白白浪费那么多时间。
- 关于arm内核编译(基于tq2440)的一些问题
- 基于Arm的Linux内核编译指导
- 关于在linux下编译内核出现的一些问题
- 关于内核编译遇到的一些小问题
- 交叉编译基于ARM架构的linux-3.6内核遇到的问题及解决方法
- 基于TQ2440的ARM启动代码注释分析(基于MDK)
- 交叉编译基于ARM体系结构的Linux内核
- 关于ARM堆栈的一些问题
- 编译内核出的一些问题
- 内核裁剪,将自己写的驱动加入内核及按键驱动的代码(arm TQ2440)
- tq2440编译ARM版本的Qt4出错问题解决
- tq2440编译ARM版本的Qt4出错问题解决
- 初学TQ2440遇到的一些问题
- 内核编译时 arm-linux-gcc的问题
- 简易内核调度设计 --基于TQ2440(ARM9)的实现(1)
- 简易内核调度设计--基于TQ2440(ARM9)的实现(2)
- 简易内核调度设计 --基于TQ2440(ARM9)的实现(3)
- 简易内核调度设计 --基于TQ2440(ARM9)的实现(4)
- Android之高德地图定位SDK集成及地图功能实现
- iOS获取User-Agent(UA)信息的方法
- C语言 <time.h>
- hihocoder 1470 公平的游戏
- 枚举类来实现单例类
- 关于arm内核编译(基于tq2440)的一些问题
- 一个好用的多选菜单
- 您的设计模式——桥梁模式【Bridge Pattern】
- 线程(Linux)
- 【PTA 5-1 N个数求和 (20分)】+ gcd
- Hibernate多对一遍历对象的时候报 java.lang.StackOverflowError错误
- #ifndef #define #endif的使用
- 转自ellisonDon PHP定时执行任务的实现
- LeetCode 算法刷题(9)