源代码解析六月还真的放下了.已经好久不再去碰他.估计还有不知几个月才能继续拿起来了.
最近探索安卓的源代码,从头开始搞.这是 一个坚韧的历程.敢如我冒险的人不多.
首先是选一块板子,当然不要选什么6410啥的,那个价位的已经跟不上安卓的发展,当然也不能选panda,这个价格不是 一般人能承受的起.我选择一个当年在新闻上灰常牛X的板子,当然那个灰常牛X的芯片还在娘肚子里,只不过大哥先出来了.售价16刀,不过也不能说什么,毕竟我是吃螃蟹的,买的开发板是工程样片版.当然,ti官方说是量产了,但是我不承认.因为在我使用的过程中,的确还是像一个工程样板.比如jtag 使用32bit读总线就非常稳定,反而8bit读总线就容易死机.jtag复位芯片的时候发现不太稳定,怎么说我复位之后pc也应该是0吧,不过按键复位还是能复位的.否则,这工程样片就该扔垃圾箱了.
好了,就他了,谁让我是从芯片公司出来的呢.
不过我想告诫那些买beaglebone和am335x这颗明星芯片的人,这绝对是一个绝佳的学习机会,你将遇到所有开发板都遇不到的挑战.你能学到最多的东西.当然,道路是曲折的,曲折不一定是暂时的.好的是ti提供了基础平台,只要你不追求用最新 的安卓,那一切嗲不不麻烦.Linux的更新比较快,基本上跟着最新内核一直在更新.如果你用安卓,那就悲剧了,安卓是不支持最新的内核,因为omap家族有一只熊猫被姑姑看上了,成了标准测试环境,也进入了市场手机中,所以这个狗骨头,应该改名叫**骨头,真是食之无肉,弃之有味.当然,如果你**不懈的把狗骨头啃完了,或许,下次弄个狗腿什么的,也就容易吃了.不至于拿着狗腿没处下嘴.
最近一时兴起,准备将最新的安卓移植到狗身上,当然这块狗骨头让我想起当年我想吧官方的Linux移植到友善的2440上,当然现在的Linux里已经有了mini2440的移植代码.那时候,与现在搞beaglebone一样,编译没问题,下载进去一个串口命令都打不出来.狗娘养的....可怜了那时候,网络发达但写手很少,拿着一个配置gdb不成功的jlink,,根本难决定何处下手.不过现在好像真正确分析好启动代码的**也很少.让我对最前面提到的工程还是信心百倍.能看懂启动代码的懒的写博文,看不懂的,难以知其奥妙.真是悲观至极.但是现在的我,已经不是4年前的水平,已经是一个骨灰级人物了.虽然我是骨灰级人物,当然也不是傻了吧唧的去从头啃代码,问问谷歌我就知道哪个文件控制这输入,grep一下.就知道啥问题了.当然,我还要确认一下硬件有没有问题,用我们陆老大的办法,直接用openocd写一个字符到串口缓冲区,呵呵,就验证了硬件的完好.软件上也跟简单,增加一个匹配项,让他支持这个开发板就行了.如果你还不知道,就多看看那几个宏定义吧.容易,非常容易....
那个解压缩内核的命令就顺利的打印出来了.然后...又开始了永久的沉默.....
这个沉默就解决起来 有点麻烦了...为了省事,我使用了omap3beagle,虽然这个已经并入Linux主线,当然,这还是给beagleboard开发的,狗骨头还是不太适应.更不太适应的是狗骨头的uboot提供的体系结构代码还是一个专有的,根本没理已经出世的狗兄弟.真是不团结啊.找到这个问题,还是缘起Linux的log_buf,在串口打印信息输出之前,Linux是有一个空窗期的,这段时间出现的问题,都是沉默.因为串口输出的信息,都因为没有初始化串口而被关在牢房里.狗啊...放他们出来吧.这个时候mmu已经打开,原理串口地址不能用于数据输出了.偏偏这个时候挂了.叫天天不灵叫地地不应.只能找个刺客进去看看.我halt住cpu.看看pc的地址.当然,第一件是查户口薄,妈的那个函数这么气人,把我的函数给关进去了?当然函数是找到了,System.map还是没白生成.不过这还是一条弯路.System.map有更好的东西告诉你,那就是log_buf,这个变量所在的地址的值是串口缓存的地址,第一个问题进去一看就知道,是体系id不支持,然后死循环....修改方法还是和加串口一样.这个直接把omap3beagle的id改成beaglebone的,虽然是一个爹养的,但是双胞胎毕竟是双胞胎,很多函数的处理还是不一样的.本来想把beaglebone的代码移植过来,发现依赖太多,Linux版本不同,又不好打patch.那就继续看代码吧.这样还能增进功力.其实好的代码写的都很简单.不像中国人的产品,写的别人能看懂就好像自己很没水平,一堆堆的山寨代码除了扔垃圾箱,就没别的用.刚刚骂我中国人的代码,也发现ti也没好哪里去,当然,这些混蛋代码估计出自ti中国...虽然没有找到中国人的签名,但是omap3xxx这个函数认为会兼容后续设计,最后却发现tmd为什么人兼容不了omap am33xx呢.脑残的codeman有写了一个函数叫omap33xx,我估计不用ti的孙子,再出一个芯片有tmd就支持不了了,到时候就要写一个omap336x了...狗娘养的,多定义一个宏会死人还是改一个宏的名字会死人,非要复用ti18xx的宏定义给beaglebone!你说给狗弄上一堆染发剂,不论不累的领出去不怕丢人?当然,这些东西都在
mach-omap里面,Linux不会去做规范性审核,既然你愿意在家里丢人,Linux懒的理你.悲剧到现在我还想先去看看Linux移植团队是怎么写的,但愿和安卓移植团队不是一伙的.那样我还能有一个好的代码参考库....今天就写到这里...且等下回分解 |