机缘巧合,让我开始有了学习linux的念头,这个念头断断续续的有了一段时间,都没有下定决心开始学习(原因是白天上班没机会学,晚上想休息没兴趣学好吧,我的毅力不够)。有这个念头的主要原因还是因为觉得作为一个程序狗只有大linux才是挣钱的王道啊。由于有一段时间比较自满自己的现状所以也就一直没狠下心来学linux。终于在某一天我狠下心来觉得还是要学linux,从我家的杂物间里面找到还没有拆过包装花了我几百大洋买的开发板开始了我学习linux的旅程。
今天是我第一次记录我学习的过程,为了鼓励自己和让自己咬牙坚持所以决定至少每天更新一次我的学习记录。由于本人是自学,唯一的老师就是大百度所以可能要走很多弯路,不过还好我有时间,只要坚持!!!!
我买的开发板是itop-4412很老的开发板,里面的cpu是三星的exynos,cpu架构是arm cotex-a9,拿到他的开发板首先折腾了一下开发环境,Ubuntu,版本是12.04LTS。也是装在虚拟机上面,虚拟机用的版本是VM11。在运行开发板自带的Ubuntu时老是报错,上网查了一下是bios底下一个选项没有支持叫什么鬼东西我忘记了,反正只要百度一下就能搞定,这个是自己电脑的问题。好开发环境跑起来了,接下来就是要跑一下我金贵的开发板了,上电通过串口,我是笔记本电脑用的usb转串口线下了好多驱动才搞定ftdi_ft232_drive这个驱动才搞定。上电uboot启动然后启动内核,接下来干什么就傻眼了。我也看来开发板里面东西各种例子开发,对于我一个白痴来说这个有点难。那么接下来到底该干什么!!!!?
想了又想,决定还是先研究uboot,然后内核,然后应用程序开发,有人说那得多久,没事反正我的时间多,学呗。
开始了uboot学习,uboot我已经自己搞了几天,发现老版本的uboot和新版本的uboot目录架构不太一样,不过uboot的编译过程基本还是一样的,通用uboot的编译方法是make XXX_config make,就欧克了。我的开发板就比较特殊了他是运行一个build的批处理文件后面跟一个和开发板相关的参数,我看了里面的内容实际上还是make
distclean make XXX_config make只不过被封装了。
这样我就在开发板提供的环境下面,以及他们提供的uboot源码进行了原封不动的编译工作,编译过了。好了这个时候知道我可以学习我的uboot代码了。(不过现在我还不会烧写uboot,因为我没有sd卡,所以先学习吧阿门)。
Uboot的代码分析网上有很多了,有老的也有新的,我是结合着看的,看视频我学老的,开博客我就学新的,总的来说uboot就是从start..s开始进行各种初始化然后跑到main_loop,等待开发者去敲写命令。
这个过程我想讲新的因为我公司在用新的uboot嘿嘿。新的uboot的启动过程.Start..s 开始进行各种初始化然后跳转到_main 这个在arch/arm/lib/crt0.s中,在_main最后会调用borad_init_f函数进入C代码阶段前面都是汇编,这之前一定要设置堆栈SP不然是没办法调用board_init_f的。后面就进入各种初始化化阶段。今天先写这么多。由于我自学所以都是跳着看的也只能写我认为比较重要的。