2.2.5、为什么选择ARM9 S3C2440开发板,而不是其他性能更好的?
有一个错误的概念:S3C2440过时了、ARM9过时了。
这是不对的,如果你是软件工程师,无论是ARM9、ARM11、A8还是A9,对我们来说是没有差别的。一款芯片,上面有CPU,还有众多的片上设备(比如UART、USB、LCD控制器)。我们写程序时,并不涉及CPU,只是去操作那些片上设备。
所以:差别在于片上设备,不在于CPU核;差别在于寄存器操作不一样。
因为我们写驱动并不涉及CPU的核心,只是操作CPU之外的设备,只是读写这些设备的寄存器。之所以推荐S3C2440,是因为它的Linux学习资料最丰富,并有配套的第1、2期视频。
2.2.6、怎么学习ARM+Linux的裸机开发
学习裸机开发的目的有两个:
①掌握裸机程序的结构,为后续的u-boot作准备
②练习硬件知识,即:怎么看原理图、芯片手册,怎么写代码来操作硬件
后面的u-boot可以认为是裸机程序的集合,我们在裸机开发中逐个掌握各个部件,再集合起来就可以得到一个u-boot了。后续的驱动开发,也涉及硬件操作,你可以在裸机开发中学习硬件知识。
注意:如果你并不关心裸机的程序结构,不关心bootloader的实现,这部分是可以先略过的。在后面的驱动视频中,我们也会重新讲解所涉及的硬件知识。
推荐两本书:杜春蕾的《ARM体系结构与编程》,韦东山的《嵌入式Linux应用开发完全手册》。后者也许是国内第1本涉及在PC Linux环境下开发的ARM裸机程序的书,如果我说错了,请原谅我书读得少。
对于裸机开发,我们提供有2部分视频:
①环境搭建
第0课第1节_刚接触开发板之接口接线.wmv
第0课第2节_刚接触开发板之烧写裸板程序.wmv
第0课第3节_刚接触开发板之重烧整个系统.wmv
第0课第4节_刚接触开发板之使用vmwae和预先做好的ubuntu.wmv
第0课第5节_刚接触开发板之u-boot打补丁编译使用及建sourceinsight工程.wmv
第0课第6节_刚接触开发板之内核u-boot打补丁编译使用及建sourceinsight工程.wmv
第0课第7节_刚接触开发板之制作根文件系统及初试驱动.wmv
第0课第8节_在TQ2440,MINI2440上搭建视频所用系统.wmv
第0课第9节_win7下不能使用dnw烧写的替代方法.wmv
②裸机程序开发
第1课 环境搭建及工具、概念介绍.wmv
第2课 GPIO实验.wmv
第3课 存储管理器实验.wmv
第4课 MMU实验.wmv
第5课 NAND FLASH控制器.wmv
第6课 中断控制器.wmv
第7课 系统时钟和UART实验.wmv
第8课 LCD实验.wmv
要声明的是:
录制上述《裸机程序开发》视频时,本意是结合《嵌入式Linux应用开发完全手册》的《第2篇 ARM9嵌入式系统基础实例篇》来讲解,所以视频里没有完全从零编写代码,需要结合书本来学习。
①书和视频并不是完全配套的,不要照搬,其中的差异并不难解决。
《嵌入式Linux应用开发完全手册》发表于2008年,使用了很多款开发板,并且那时的开发板配置较低(Nand Flash是64M);《裸机程序开发》视频使用JZ2440开发板录制。
②书和视频,适用于所有S3C2440开发板,包括mini2440、tq2440等
天下S3C2440配置都是相似的,基本也就是LED、按键所用引脚不同,LCD型号不同;你学习了书、视频,如果连这些差异都搞不定的话,那就是你我的失败了。
学习方法是这样的:
①先看《环境搭建》视频来搭建开发环境
②书(第2篇)和视频(裸机程序开发)结合,看完一章,练习一章
一定要编写代码,即使是照抄也要写。
③如果对于ARM架构相关的知识,觉得模糊或是想了解得更深入,参考《ARM体系
结构与编程》
学习程度:
①理解一个裸机程序的必要结构:异常向量、硬件初始化、代码重定位、栈
②知道如何操作GPIO、Flash、LCD、触摸屏等硬件
③很多人觉得MMU难以理解,可以放过它
2.2.7、bootloader的学习
bootloader有很多种,vivi、u-boot等等,最常用的是u-boot。
u-boot功能强大、源码比较多,对于编程经验不丰富、阅读代码经验不丰富的人,一开始可能会觉得难以掌握。但是,u-boot的主要功能就是:启动内核。它涉及:读取内核到内存、设置启动参数、启动内核。按照这个主线,我们尝试自己从零编写一个bootloader,这个程序相对简单,可以让我们快速理解u-boot主要功能的实现。
从零编写bootloader的视频有:
毕业班第1课第1.1节_自己写bootloader之编写第1阶段.wmv
毕业班第1课第1.2节_自己写bootloader之编写第2阶段.wmv
毕业班第1课第2节_自己写bootloader之编译测试.wmv
毕业班第1课第3节_自己写bootloader之改进.wmv
分析u-boot 1.1.6的视频有:
第9课第1节 u-boot分析之编译体验.wmv
第9课第2节 u-boot分析之Makefile结构分析.wmv
第9课第3节 u-boot分析之源码第1阶段.wmv
第9课第3节 u-boot分析之源码第2阶段.wmv
第9课第4节 u-boot分析之u-boot命令实现.wmv
第9课第5节 u-boot分析_uboot启动内核.wmv
移植一个全新u-boot的视频有:
毕业班第2课第1节_移植最新u-boot之初试.wmv
毕业班第2课第2.1节_移植最新u-boot之分析启动过程之概述.wmv
毕业班第2课第2.2节_移植最新u-boot之分析启动过程之内存分布.wmv
毕业班第2课第2.3节_移植最新u-boot之分析启动过程之重定位.wmv
毕业班第2课第3.1节_移植最新u-boot之修改代码之建新板_时钟_SDRAM_UART.wmv
毕业班第2课第3.2节_移植最新u-boot之修改代码支持NAND启动.wmv
毕业班第2课第3.3节_移植最新u-boot之修改代码支持NorFlash.wmv
毕业班第2课第3.4节_移植最新u-boot之修改代码支持NandFlash.wmv
毕业班第2课第3.5节_移植最新u-boot之修改代码支持DM9000网卡.wmv
毕业班第2课第4.1节_移植最新u-boot之裁剪和修改默认参数.wmv
毕业班第2课第4.2节_移植最新u-boot支持烧写yaffs映象及制作补丁.wmv
《嵌入式Linux应用开发完全手册》上对u-boot的讲解有如下章节:
15.1 Bootloader简介
15.1.1 Bootloader的概念
15.1.2 Bootloader的结构和启动过程
15.1.3 常用Bootloader介绍
15.2 U-Boot分析与移植
15.2.1 U-Boot工程简介
15.2.2 U-Boot源码结构
15.2.3 U-Boot的配置、编译、连接过程
15.2.4 U-Boot的启动过程源码分析
15.2.5 U-Boot的移植
15.2.6 U-Boot的常用命令
15.2.7使用U-Boot来执行程序
学习方法如下:
①先学习《从零编写bootloader的视频》,这可以从最少的代码理解bootloader的主要功能
②再看书上对u-boot的讲解,并结合《分析u-boot 1.1.6的视频》来理解
③最后,有时间有兴趣的话,看《移植一个全新u-boot的视频》,这不是必须的。
学习程度:
①理解u-boot的启动过程,特别是u-boot代码重定位:怎么从Flash上把自己读入内存
②理解u-boot的核心:命令
③知道bootloader如何给内核传递参数
④知道bootloader是根据“bootcmd”指定的命令启动内核
⑤作为入门:只求理解,不要求能移植u-boot
2.2.8、Linux内核的学习
前面说过,内核本身不是我们学习的重点,但是了解一下内核的启动过程,还是很有必要的:工作中有可能要修改内核以适配硬件,掌握了启动过程才知道去修改哪些文件。
分析内核的视频有:
第10课第1节 内核启动流程分析之编译体验.wmv
第10课第2节 内核启动流程分析之配置.wmv
第10课第3节 内核启动流程分析之Makefile.wmv
第10课第4节 内核启动流程分析之内核启动.wmv
移植内核的视频有:
业班第3课第1节_移植3.4.2内核之框架介绍及简单修改.wmv
毕业班第3课第2节_移植3.4.2内核之修改分区及制作根文件系统.wmv
毕业班第3课第3节_移植3.4.2内核之支持yaffs文件系统.wmv
毕业班第3课第4节_移植3.4.2内核之裁剪及ECC简介及制作补丁.wmv
《嵌入式Linux应用开发完全手册》上对内核的讲解有如下章节:
16.1 Linux版本及特点
16.2 Linux移植准备
16.2.1 获取内核源码
16.2.2 内核源码结构及Makefile分析
16.2.3 内核的Kconfig分析
16.2.4 Linux内核配置选项
16.3 Linux内核移植
16.3.1 Linux内核启动过程概述
16.3.2 修改内核以支持S3C2410/S3C2440开发板
16.3.3 修改MTD分区
16.3.4 移植YAFFS文件系统
16.3.5 编译、烧写、启动内核 |