如何学习嵌入式Linux
- 格式:doc
- 大小:33.50 KB
- 文档页数:4
嵌入式Linux驱动开发教程PDF嵌入式Linux驱动开发教程是一本非常重要和实用的教材,它主要介绍了如何在Linux操作系统上开发嵌入式硬件设备的驱动程序。
嵌入式系统是指将计算机系统集成到其他设备或系统中的特定应用领域中。
嵌入式设备的驱动程序是连接操作系统和硬件设备的关键接口,所以对于嵌入式Linux驱动开发的学习和理解非常重要。
嵌入式Linux驱动开发教程通常包括以下几个主要的内容:1. Linux驱动程序的基础知识:介绍了Linux设备模型、Linux内核模块、字符设备驱动、块设备驱动等基本概念和原理。
2. Linux驱动编程的基本步骤:讲解了如何编译和加载Linux内核模块,以及编写和注册设备驱动程序所需的基本代码。
3. 设备驱动的数据传输和操作:阐述了如何通过驱动程序与硬件设备进行数据的传输和操作,包括读写寄存器、中断处理以及与其他设备的通信等。
4. 设备驱动的调试和测试:介绍了常用的驱动调试和测试技术,包括使用调试器进行驱动程序的调试、使用模拟器进行驱动程序的测试、使用硬件调试工具进行硬件和驱动的联合调试等。
通常,嵌入式Linux驱动开发教程的PDF版本会提供示例代码、实验步骤和详细的说明,以帮助读者更好地理解和掌握嵌入式Linux驱动开发的核心技术和要点。
读者可以通过跟随教程中的示例代码进行实际操作和实验,深入了解和体验嵌入式Linux驱动开发的过程和方法。
总之,嵌入式Linux驱动开发教程是一本非常重要和实用的教材,对于想要在嵌入式领域从事驱动开发工作的人员来说,具有非常重要的指导作用。
通过学习嵌入式Linux驱动开发教程,读者可以系统地了解和学习嵌入式Linux驱动开发的基本原理和技术,提高自己在嵌入式Linux驱动开发方面的能力和水平。
嵌入式linux开发课程设计一、课程目标知识目标:1. 理解嵌入式Linux系统的基本概念、原理和架构。
2. 掌握嵌入式Linux开发环境的搭建与使用。
3. 学习嵌入式Linux内核配置、编译与移植方法。
4. 掌握常见的嵌入式Linux设备驱动编程技术。
技能目标:1. 能够独立搭建嵌入式Linux开发环境。
2. 熟练运用Makefile、交叉编译工具链进行代码编译。
3. 能够编写简单的嵌入式Linux设备驱动程序。
4. 学会分析并解决嵌入式Linux开发过程中的常见问题。
情感态度价值观目标:1. 培养学生对嵌入式系统开发的兴趣,提高学习积极性。
2. 培养学生的团队协作意识,增强沟通与表达能力。
3. 培养学生勇于克服困难,面对挑战的精神。
分析课程性质、学生特点和教学要求:本课程为高年级专业课程,要求学生具备一定的C语言基础和计算机硬件知识。
课程性质为理论与实践相结合,注重培养学生的实际动手能力。
针对学生特点,课程目标设定了明确的知识点和技能要求,旨在使学生能够掌握嵌入式Linux开发的基本方法,为后续项目实践和职业发展奠定基础。
课程目标分解为具体学习成果:1. 学生能够阐述嵌入式Linux系统的基本概念、原理和架构。
2. 学生能够自主搭建嵌入式Linux开发环境,并进行简单的程序编译与运行。
3. 学生能够编写简单的嵌入式Linux设备驱动程序,并实现相应的功能。
4. 学生能够针对嵌入式Linux开发过程中遇到的问题,提出合理的解决方案,并进行实际操作。
二、教学内容1. 嵌入式Linux系统概述- 嵌入式系统基本概念- 嵌入式Linux的发展历程- 嵌入式Linux系统的特点与优势2. 嵌入式Linux开发环境搭建- 交叉编译工具链的安装与配置- 嵌入式Linux文件系统制作- 常用开发工具的使用(如Makefile、GDB)3. 嵌入式Linux内核与驱动- 内核配置与编译- 内核移植方法- 常见设备驱动编程(如字符设备、块设备、网络设备)4. 实践项目与案例分析- 简单嵌入式Linux程序编写与运行- 设备驱动程序编写与调试- 分析并解决实际问题(如系统性能优化、故障排查)教学内容安排与进度:1. 嵌入式Linux系统概述(2课时)2. 嵌入式Linux开发环境搭建(4课时)3. 嵌入式Linux内核与驱动(6课时)4. 实践项目与案例分析(8课时)本教学内容基于课程目标,结合教材章节内容,注重理论与实践相结合,旨在培养学生的实际动手能力和解决问题的能力。
作为一个新人,怎样学习嵌入式Linux?(韦东山)被问过太多次,特写这篇文章来回答一下。
在学习嵌入式Linux之前,肯定要有C语言基础。
汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。
C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。
比如写一个数组排序、输入数字求和什么的。
学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。
以前我是用VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。
它们是纯C、纯数学、纯逻辑的题目,不涉及界面这些东西,很适合煅炼你的编程能力。
回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux 可以分为两部分:底层系统、应用开发。
如果你是想做应用开发,那么你去把C 语言、数据结构、JAVA什么的学好吧。
嵌入式应用开发和PC上的应用开发并没有什么特别要注意的。
也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。
另外,当你有能力去优化时,你已经不用来问这个问题了。
具体到某个例子,比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。
但是基础还是C或JAVA,在此基础上去熟悉它们的接口。
你学过VC的话,也是要花时间去了解那些类、控件的。
如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。
在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用?我只能说凭兴趣,并且驱动和应用并不是截然分开的1. 我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念。
想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该懂2. 做应用门槛低,特别是现在的ANDROID,纯JAVA。
做应用的发展路径个人认为就是业务纯熟。
比如在通信行业、IPTV行业、手机行业,你了解行业的需求。
嵌入式学习心得体会嵌入式学习心得体会14月10号,为期一个阶段的Linux开发基础培训课程圆满结束,回首这些天所留下的点点滴滴,感触深深,学习上知识点的积累,灵活运用的过程中感受到了Linux操作的快速高效性能,这也是我所追求的效率!当初初涉培训课程的第一门课程时,都说Linux操作很繁琐复杂,心里总有些顾忌,带着种种不安与些许拼博的决心,开始了自我提升阶段的“充电”,由徐海兵老师教授我们基础课程的培训,我们则像着小学生般认真的记着笔记,仔细听着并学会如何去在实践中运用所学的Linux下的各种强大的命令集。
在Unit 1中,徐老师详细生动的为我们讲述了有关Linux的诞生、初成长以及辉煌的发展至今,今后应用范围则愈来愈广泛,讲解了为Linux这个伟大的OS做出巨大贡献的一位位出色的、伟大的人物,他们那种学习钻研的精神、锲而不舍的信念、勇于把握住难得的机会,从小处着手,踏踏实实的创造出了对人类科技发展做出卓越贡献的Linux(Unix)系统,他们的种种,都值得我们去深刻反省、刻苦学习、传承并永远发展下去。
查看ip地址和重启网络服务是我学的第一个命令: ifconfig eth0、ifconfig eth0 IP地址、service network restart。
了解到远程登录软件可用xmanager。
secureCRT是我们常用的,安装好后利用其登录到了Red hat Linux,需要知道Linux主机的ip 地址。
徐老师为我们介绍了重要内容:SHELL,即运行程序的程序,如echo $$SHELL可查看SHELL的环境变量是csh还是bash。
指令pwd 可查看当前所在路径,passwd:更改Linux下的密码,仅限root用户有此权限,当然我们是利用虚拟机VMware程序来运行Linux OS的,懂得了如何设置虚拟机的网卡设置、暂停、恢复、全屏等。
简单的学习后进入Unit 2,命令行的句法让我懂得了用法规则,一系列的命令功能强大:date 显示当前年月时间星期之类的;more指令与less重要但不常用;cat用于查看短小的文件内容,常用!mkdir命令用于在当前目录下创建新的目录;ls 显示当前目录下所有文件;cd 更改文件路径,如cd 、cd . 当前目录;rmdir 删除空文件夹;rm指令很强大,用于删除空目录及非空目录下的指定或全部文件;man 真男人,帮助手册;history指令用于显示编写过的命令集,以history 序号可显示序号所指命令;echo回写命令,很重要,我需要继续学习;exit 指从多重SHELL退出来。
嵌入式linux开发教程pdf嵌入式Linux开发是指在嵌入式系统中使用Linux操作系统进行开发的过程。
Linux作为一种开源操作系统,具有稳定性、可靠性和灵活性,因此在嵌入式系统中得到了广泛的应用。
嵌入式Linux开发教程通常包括以下内容:1. Linux系统概述:介绍Linux操作系统的发展历程和基本原理,包括内核、文件系统、设备驱动等方面的知识。
了解Linux系统的基本结构和工作原理对后续的开发工作至关重要。
2. 嵌入式开发环境搭建:通过搭建开发环境,包括交叉编译器、调试器、仿真器等工具的配置,使得开发者可以在本机上进行嵌入式系统的开发和调试。
同时,还需要了解各种常用的开发工具和调试技术,如Makefile的编写、GDB的使用等。
3. 嵌入式系统移植:嵌入式系统往往需要根据不同的硬件平台进行移植,以适应各种不同的硬件环境。
这个过程包括引导加载程序的配置、设备驱动的移植和内核参数的调整等。
移植成功后,就可以在目标硬件上运行Linux系统。
4. 应用程序开发:在嵌入式Linux系统上进行应用程序的开发。
这包括编写用户空间的应用程序,如传感器数据采集、数据处理、网络通信等功能。
还需要熟悉Linux系统提供的各种库函数和API,如pthread库、socket编程等。
5. 系统优化和性能调优:在开发过程中,经常需要对系统进行调优和优化,以提高系统的性能和稳定性。
这包括对内核的优化、内存管理的优化、性能分析和调试等。
只有深入了解和熟练掌握这些技术,才能使得嵌入式系统运行得更加高效和稳定。
嵌入式Linux开发教程PDF通常会结合理论和实践相结合的方式进行教学,通过实际的案例和实践操作,帮助开发者快速掌握嵌入式Linux开发的技术和方法。
同时还会介绍一些常见的开发板和硬件平台,以及开源项目等,帮助开发者在实际项目中应用所学的技术。
总之,嵌入式Linux开发教程PDF提供了系统而详细的指导,帮助开发者快速入门嵌入式Linux开发,掌握相关的技术和方法,以便更好地进行嵌入式系统的开发工作。
嵌入式linux系统开发标准教程嵌入式Linux系统开发是一门非常重要的技术,它在嵌入式设备、物联网和智能家居等领域中得到广泛应用。
本文将介绍嵌入式Linux系统开发的标准教程,帮助读者了解该技术的基本原理和常用的开发工具。
一、嵌入式Linux系统开发的基本原理嵌入式Linux系统开发是指将Linux操作系统移植到嵌入式设备中,并针对特定的应用领域进行定制开发。
它与传统的桌面Linux系统有很大的区别,主要体现在以下几个方面:1. 硬件平台的选择:嵌入式设备通常采用ARM架构或者其他低功耗的处理器架构,而不是传统的x86架构。
因此,在进行嵌入式Linux系统开发时,需要根据具体的处理器架构进行相应的移植和优化。
2. 精简的内核:由于嵌入式设备的资源有限,为了提高系统性能和节省资源,嵌入式Linux系统通常会精简内核。
这需要对Linux内核的源代码进行裁剪和优化,以去除不必要的模块和功能,并保留对应用需求的必要功能。
3. 定制化的驱动程序和应用程序:嵌入式设备通常需要与各种外设进行交互,因此需要编写相应的驱动程序。
此外,根据具体的应用需求,还需要定制相关的应用程序和用户界面。
二、嵌入式Linux系统开发的工具嵌入式Linux系统开发需要使用一些常用的工具,下面是一些常用的工具和其功能的介绍:1. 交叉编译工具链:由于嵌入式设备和开发主机的处理器架构不同,无法直接在开发主机上编译和运行目标代码。
因此,需要使用交叉编译工具链,在开发主机上生成适用于目标设备的可执行文件。
2. 调试工具:在嵌入式Linux系统开发过程中,调试是非常重要的一环。
常用的调试工具包括GDB(GNU调试器)和strace(系统调用跟踪工具),它们可以帮助开发人员追踪程序的执行过程和定位错误。
3. 文件系统工具:嵌入式设备的存储资源有限,需要使用文件系统来组织和管理存储的数据。
常用的文件系统工具包括mkfs(创建文件系统)、mount(挂载文件系统)以及文件传输工具(如scp和rsync)等。
韦东⼭嵌⼊式Linux学习笔记-1-为什么要学习嵌⼊式Linux论单⽚机学习单⽚机的前途:没⼯作啊~没⼈会⽤⽉薪2万来招聘⼀个博⼠写本科⽣都能做的事;不要使⽤C51、STM32这种单⽚机专⽤的开发板;不要使⽤Keil等MDK,集成度太⾼的软件(内部封装了很多技术细节).嵌⼊式Linux与Windows的区别windows系统: 上电->BIOS->启动Windows内核->挂载C盘,D盘等系统盘,应⽤盘->启动应⽤程序;嵌⼊式Linux系统: 上电->BootLoader->启动Linux内核->挂载根⽂件系统->启动应⽤程序.BootLoader的功能要从Flash/SD卡读取内核,需要:1. 初始化时钟,初始化内存,设置⽹卡;2. 从Flash/SD卡中读取内核启动;3. 显⽰logo,需要操作LCD.* 那怎么写这些呢?* ⼀步步地写!从LED,时钟,⽹卡,Flash等⼀步步去写.(**本质就是单⽚机程序!**)**BootLoader是单⽚机程序⼤全.**Linux内核的功能内核要挂载根⽂件系统,意味着内核也要能操作硬件!,这就是驱动程序.简单驱动程序框架:驱动程序=软件框架+硬件配置.* (软件)应⽤程序调⽤: open, read, write;* (硬件)驱动程序执⾏: drv_open要配置硬件,GPIO设置为输出;drv_read要返回GPIO状态;drv_write要写GPIO的值.* 要掌握硬件开发的能⼒:学会看原理图,看芯⽚⼿册,知道怎么读写寄存器.开发嵌⼊式Linux系统的硬件需求* 开发板选择: `单⽚机->bootloader->linux驱动->APP(纯C++⽆界⾯应⽤程序,Qt/Android); `* 开发板种类:三星(S3C2440, S3C6410, S5PV210, EXYNOS4412), TI(AM437X,AM335X), Freescale(I.MX6), 国产芯⽚(全志,瑞芯微).* 选择原则:资料丰富-S3C2440为⾸选!* 使⽤S3C2440开发板,在Ubuntu下使⽤arm-linux-gcc⼯具来编译程序.JZ2440开发板上电* 插上电源,打开开关;可以看到linux的企鹅以及后⾯的Qt桌⾯;* 连接串⼝,在PC上打开串⼝⼯具`MobaXterm`,点击左上⾓的`Session`,点击弹出窗⼝的`Serial`,Serial Port选择 Prolific开头的那个端⼝,波特率选择115200, Advance Settings⾥的Serial Engine选择`PuTTY`,硬件流控制选择`None`,点击`OK`.* 按空格键,可以查看到开发板上运⾏的Linux内核系统,在这⾥可以运⾏Linux命令⾏指令. 可以理解为,这⾥直接连接了Linux开发板.嵌⼊式Linux开发概述。
1华清远见嵌入式培训官网:嵌入式系统开发学习路线嵌入式人才成为了IT业界的新宠儿也就在这几年。
在这样一个炙手可热的行业当中,越来越多的人想跻身这个行业。
怎样才能成为一名优秀的嵌入式大师。
只要你积极不断提升自己的专业技能。
哪怕以后有再多的人跻身这个专业。
你同样可以成为业内的佼佼者。
想学好嵌入式单单找几本书看看是远远不够的。
其实嵌入式的门槛还是比较高的,当然只要我们找到合适的应对方法。
也就把握了解决嵌入式开发的“死穴”华清远见小编就跟大家分享一下嵌入式系统学习路线,希望能够帮助到大家!基础学习:Linux入门+C语言+Linux应用程序设计Linux入门:目前嵌入式主要开发环境有 Linux、Wince等;Linux因其开源、开发操作便利而被广泛采用。
不应纠结于那个版本,而是尽快把 Linux系统尽快安装好。
如果打算坚持长期学习,那么建议您把自己的电脑做成双系统,而不要在虚拟机上安装;C语言:C 语言是嵌入式开发必备的基础知识。
学习C语言,如果不会用指针,那么就称不上会C语言。
做嵌入式开发指针更显得尤为重要,在嵌入式学习过程当中,C语言就像是整栋嵌入式大厦的基础,你只需要通过多敲、多练就一定可以成为一名准嵌入式工程师。
Linux应用程序设计:Linux的思想源于Unix,Linux继承了Unix的优点,而且Linux与Unix的源码级兼容。
“万丈高楼平地起”也就是说这三方面是非常重要的。
嵌入式入门:ARM体系结构从这部分开始,我们就真正要进入嵌入式开发学习的阶段了,首先我们应该了解ARM的技术特征,明白他的成功主要是基于两方面,一、得益于它独特的公司运作模式;二、来自于ARM处理器自身的优良性能,以及ARM处理器的相关特点等等……嵌入式提升:Linux内核、驱动众所周知嵌入式开发包含至少两个级别,一个是嵌入式内核驱动级别,另外一个是嵌入式应用层开发,而薪酬高的、最具价值的无疑是嵌入式内核驱动级别的开发者。
作为一个新人,怎样学习嵌入式Linux?作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下。
在学习嵌入式Linux之前,肯定要有C语言基础。
汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。
C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。
比如写一个数组排序、输入数字求和什么的。
学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。
以前我是用VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。
它们是纯C、纯数学、纯逻辑的题目,不涉及界面这些东西,很适合煅炼你的编程能力。
回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux可以分为两部分:底层系统、应用开发。
应用开发:C语言、JAVA、数据结构如果你是想做应用开发,那么你去把C语言、JAVA、数据结构什么的学好吧。
嵌入式应用开发和PC上的应用开发并没有什么特别要注意的。
也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。
另外,当你有能力去优化时,你已经不用来问这个问题了。
具体到某个例子,比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。
但是基础还是C或JAVA,在此基础上去熟悉它们的接口。
你学过VC的话,也是要花时间去了解那些类、控件的。
如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。
在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用?我只能说凭兴趣,并且驱动和应用并不是截然分开的。
1. 我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念。
想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该懂。
2. 做应用门槛低,特别是现在的ANDROID,纯JAVA。
做应用的发展路径个人认为就是业务纯熟。
比如在通信行业、IPTV行业、手机行业,你了解行业的需求。
所以,当领导的人,多是做应用出身的。
3. 做驱动,其实我不想称为“做驱动”,而是想称为“做底层系统”,做好了这是通杀各行业。
我工作几年,做过手机、IPTV、会议电视,但是这些产品对我毫无差别,因为我只做底层。
他们的业务跟我没关系。
当应用出现问题,他们解决不了时,我就会从内核角度给他们出主意,给他们提供工具。
做底层的发展方向,个人认为是技术专家。
4. 其实,做底层还是做应用,之间并没有一个界线,有底层经验,再去做应用,你会感觉很踏实。
有了业务经验,你再了解一下底层,很快就可以组成一个团队。
回到怎么学的问题上。
嵌入式Linux底层系统包含哪些东西?不要急,举一个例子你就知道了。
1. 电脑一开机,那些界面是谁显示的?是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。
类似的,这个BIOS对应于嵌入式Linux里的bootloader。
这个bootloader 要去Flash上读入Linux内核,并启动它。
2. 启动windows的目的是什么?当然是上网聊天什么的了。
这些上网、聊天工具在哪?在C盘、D盘上。
所以, windows要先识别出C盘、D盘。
在Linux下我们称为根文件系统。
3. windows能识别出C盘、D盘,那么肯定能读写硬盘才行。
这涉及的东西称为驱动程序。
当然不仅仅是硬盘,还有网卡、USB等等。
嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。
先说到这里吧,嵌入式LINUX里含有bootloader, 内核, 驱动程序、根文件系统这4大块。
一、bootloader:它就是一个稍微复杂的裸板程序。
但是要把这裸板程序看懂写好一点都不容易。
Windows 下好用的工具弱化了我们的编程能力。
很多人一玩嵌入式就用ADS、KEIL。
你能回答下面这几个问题吗?1. 一上电,CPU从哪里取指令执行?答:一般从Flash上指令。
2. 但是Flash一般是只能读不能直接写的,如果我用到全局变量,这些全局变量在哪里?答:全局变量应该在内存里。
3. 那么谁把全局变量放到内存里去?答:长期用ADS、KEIL的朋友,你能回答吗?这需要"重定位"。
在ADS或KEIL里,重定位的代码是制作这些工具的公司帮你写好了。
你可曾去阅读过?4. 内存那么大,我怎么知道把"原来存在Flash上的内容"读到内存的"哪个地址去"?答:这个地址用"链接脚本"决定,在ADS里有scatter文件,KEIL里也有类似的文件。
但是,你去研究过吗?5. 你说重定位是把程序从Flash复制到内存,那么这个程序可以读Flash啊?答:是的,要能操作Flash。
当然不仅仅是这些,还有设置时钟让系统运行得更快等等。
先自问自答到这里吧,bootloader这一个裸板程序,其实有3部分要点:1. 对硬件的操作2. 对ARM体系处理器的了解3. 程序的基本概念:重定位、栈、代码段数据段BSS段什么的。
对硬件的操作,需要看原理图、芯片手册。
这需要一定的硬件知识,不求你能设计硬件,但是至少能看懂; 不求能看懂模拟电路,但是要能看懂数字电路。
这方面的能力我是在学校里学到的,微机原理、数字电路这2本书(书名忘了)就足够了。
但是我怀疑你有无耐心把这2本书看完。
我不知道现在有没有更快捷的书。
想速成的话,就先放掉这块吧,不懂就问GOOGLE、发贴。
另外,芯片手册是肯定要读的,别去找中文的,就看英文的。
开始是非常痛苦,以后就会发现那些语法、词汇一旦熟悉后,读任何芯片手册都很容易。
对ARM体系处理器的了解, 看杜春蕾的《ARM体系架构与编程》吧,里面讲有汇编指令,有异常模式、MMU等。
也就这3块内容需要你了解。
程序的基本概念,王道当然是去看编译原理了。
可惜,这类书绝对是天书级别的。
劝你若非超级天才还是别去看了。
就看我写的<嵌入式Linux应用开发完全手册>和第1期视频吧,别担心,不用花钱。
照着视频把硬件相关的实验做了,这些概念就清楚了。
我还没有发现第2套讲这些概念的书或视频,允许我盲目吹嘘一回。
对于bootloader,我学习时是先看了<ARM体系架构与编程>,然后自己写程序把各个硬件的实验都做了一遍,比如GPIO、时钟、SDRAM、UART、NAND。
把它们都弄清楚了,组合在一起就很容易看懂u-boot了。
总结一下,看懂硬件原理图、看芯片手册,这需要你自己去找资料。
剩下的,就按<嵌入式Linux应用开发完全手册>和第1期视频的章节目录去学习吧。
二、内核:想速成的人,先跨过内核的学习,直接学习怎么写驱动。
想成为高手,内核必须深刻了解。
注意,我说的是了解,我没奢望去写出一个内核。
要对里面的调度机制、内存管理机制、文件管理机制等等有所了解。
推荐两本书:1. 通读<linux内核完全注释>,请看薄的那本(浮燥的社会讲求速度, 呵)。
2. 选读<Linux内核情景分析>, 想了解哪一块就读哪一节。
三、驱动:驱动包含两部分:硬件本身的操作、驱动程序的框架。
又是硬件,还是要看得懂原理图、读得懂芯片手册,多练吧。
说到驱动框架,有一些书介绍一下。
LDD3,即<Linux设备驱动>,老外写的那本,里面介绍了不少概念,值得一读。
但是,它的作用也就限于介绍概念了。
我基本上是入门之前用它来熟悉一下概念,入门后就扔掉了。
驱动方面比较全的介绍,应该是宋宝华的<linux设备驱动开发详解>了,老实说我只看过目录,有不少人说好,这里推荐一下。
要想深入了解某一块,<Linux内核情景分析>绝对是超5星级推荐。
你别指望把它读完,1800多页,上下两册呢。
我是某一块不清楚时,就去翻一下它。
任何一部分,这书都可以讲上2、3百页,非常详细。
并且是以某个目标来带你分析内核源码。
它以linux 2.4为例,但是原理相通,同样适用于其它版本的linux。
把你手上的开发板所涉及的硬件,都去尝试写一个驱动吧。
有问题就先"痛苦地思考",思考的过程中你会把很多不相关的知识串联起来,最终贯通。
四、根文件系统:大家有没有想过下面这2个问题:1. 对于Linux做出来的产品,有些用作监控、有些做手机、有些做平板。
那么内核启动后,挂载根文件系统后,应该启动哪一个应用程序呢?答:内核不知道也不管应该启动哪一个用户程序。
它只启动init这一个应用程序,它对应/sbin/init。
显然,这个应用程序就要读取配置文件,根据配置文件去启动用户程序(监控、手册界面、平板界面等等)。
这个问题提示我们,文件系统的内容是有一些约定的,比如要有/sbin/init,要有配置文件。
2. 你写的hello,world!程序,有没有想过里面用到的printf是谁实现的?答:这个函数不是你实现的,是库函数实现的。
它运行时,得找到库。
这个问题提示我们,文件系统里还要有库。
简单的自问自答到这里,要想深入了解,可以看一下busybox的init.c,就可以知道init进程做的事情了。
当然,也可以看<嵌入式Linux应用开发完全手册>里构建根文件系统那章。
说一下我的学习经历吧。
1. 我在学校时读的是物理电子专业,其实课程里没有教怎么设计电路,只是教了些电子电路方面的知识。
PCB的设计是在实验室里自学的,只设计过2层板,现在忘记得差不多了。
但是保留了看原理图、看芯片手册的能力。
2. 选修了软件学位,对软件设计挺感兴趣,但是也只是学了C语言、数据库而已。
凭着兴趣做了不少竞赛题。
没能力去参加竞赛,但是把C语言练得很扎实。
3. 在实验室、在第1家公司,就是设计些简单的PCI卡,写一下windows的驱动程序4. 在第2家公司,用51单片机做车载电话,开始走上纯软件的道路。
5. 开始感到单片机的不足,辞职半年闭门学Linux,从red hat怎么操作开始。
步骤就是先看<ARM体系架构与编程>,再自己写裸板程序操作硬件,接着到分析u-boot。
同时看<linux 内核完全注释>,对LINUX框架有所了解。
在写裸板时,建议各位加强对中断的理解,内核就是用中断来完成各种功能的。
6. 分析完u-boot,就开始进行简单的驱动编程了,这时候,能力还很弱。
7. 开始去中兴上班,工作2年,编写各类驱动、解决各类问题(驱动问题、帮助定位应用问题),能力得到煅炼。