« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9695899 建立时间:2004年12月20日 |

| |
[linux kernel]Linux高级嵌入式系统高级程序设计阅读笔记  原创空间, 文章收藏, 软件技术, 电脑与网络
邢红瑞 发表于 2010/12/13 11:40:04 |
这本书对于开发嵌入式程序员是本很好开发向导,不但讲述linux开发环境的选择,同时也讲述一个完整的linux嵌入式系统的开发过程,讲述了如何在开发板上做嵌入式开发环境,如何让他启动,裁剪内核,制作工具链,调试应用程序,系统优化。
对于初学者,根据这本书你可以轻松的做出你的第一个嵌入式项目,然后根据书上的例子,安装,配置,交叉编译linux内核,在宿主机上如何进行嵌入式的开发,构建,下发和调试。
大家通常使用windows操作系统,由于工作的原因,只有很少的人直接在裸机上装linux,大家一般是虚拟机装linux。书中也列举了几个虚拟机的选择,VMware VitualBox Qemu,几个虚拟机优缺点很明显,
Vmware是付费软件,windows下运行速度要比Qmeu快很多,linux平台下Qemu即使有加速软件,速度也很难也有Vmware相比。其实VirtualBox是个不错的选择,唯一的缺陷就是虚拟机内置的网卡只有4块,而且网络层bug比较多,Qemu的优势很明显,支持多种cpu,包括mips和arm。书中详细介绍了qemu的arm虚拟机的启动,05年我做类似的工作至少花了1个月的时间。理论上Qemu模拟的arm不是最终的解决办法,但是至少给初学者一个感性的认识,了解arm。其实很多人在拿不到真实的板子之前,都是通过模拟器工作的,当年我们就是在skyeye上完成了MPC8560的uboot。
在使用目标板后,随板一般都会提供操作系统,国内使用最多的Samsung的SC2410 ,会提供uclinux和ucos两种操作系统。其实操作系统的移植还是很简单的,主要考虑是cpu是大端还是小端,堆栈是增长是递减。对于intel的cpu 使用的小端字节序,使用的栈递减,arm 既可以是大端字节序也可是小端字节序,仅靠一根跳线控制。linux用的栈栈递减,但是ucos可以是栈增加也可以是递减。
构建linux平台遇到的主要问题是构建工具链,然后是编译linux内核,继而编译文件系统。如果大家偷懒的话,可以使用iriver的arm-elf-gcc。做完系统后,设计到的问题是如何启动,嵌入式平台不支持x86架构的bios,大多数平台使用uboot,相当多的人使用红帽的redboot,书中也进行详细介绍。系统启动后,内核的控制权交给init,绝大多数嵌入式系统因为各种原因(其中主要是节省空间),而使用busybox。
做好平台的目的是为了开发应用,嵌入式使用最多的开发语言是c,而不是c++,很少是java,不要说android可以使用java开发的,android使用的harmony,不是sun认可的jdk。几乎所有的嵌入式环境的开发都提供有c编译器,相当一部分也提供c++编译,但是未必会提供相应的c++库,例如STL的支持。嵌入式的web部分一般使用cgi和php,不大可能使用java,sun提供arm的jdk,但是因为体积过于庞大,使用人数很少,几乎没人用于生产环境中。
程序出了问题,自然少不了调试。嵌入式调试是很困难的事情,如果是java环境,并提供JPDA,程序调试是很轻松的事情。嵌入式的源码调试是很不容易的事情,大多数程序员使用JTAG调试,如果实在没有没有,可以将结果输入到产品的LED显示屏上,甚至通过发出叫声的长度,判断程序的执行步骤。书的最后讲述了如何编译内核,嵌入式程序员很大的一部分工作就是内核裁剪和编写相应平台的驱动。 |
|
|