“Jz2440VideoStudyGuide”的版本间的差异

来自百问网嵌入式Linux wiki
第36行: 第36行:
  
 
== 1.3 Linux基础驱动程序(目标⑥)(学习时间:1周) ==
 
== 1.3 Linux基础驱动程序(目标⑥)(学习时间:1周) ==
学习以下衔接课程,下载地址:[http://wiki.100ask.net/ http://wiki.100ask.net/],存放位置为:
+
:学习以下衔接课程,下载地址:[http://wiki.100ask.net/ http://wiki.100ask.net/],存放位置为:
 
  006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
 
  006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
 
:只学习其中的第5课,基于快速入门的目的,第5课不需要全部学完,只需要学习前5节视频:
 
:只学习其中的第5课,基于快速入门的目的,第5课不需要全部学完,只需要学习前5节视频:
 +
=三周掌握Linux驱动基本技能=
 +
 +
:面向对象:已经会编译第1个LED裸板程序、第1个LED驱动的人
 +
:目标:快速入门Linux驱动开发,掌握简单的LED、按键驱动开发
 +
:时长:3周
 +
:过程:
 +
::① 掌握裸机重定位(这有助于后续理解u-boot)
 +
::② 掌握裸机中断处理流程
 +
::③ 掌握Linux异常、中断处理体系
 +
::④ 编写Linux下的按键驱动程序
 +
::⑤ 掌握Linux中驱动和应用程序的交互方式:查询、中断-唤醒、poll、异步通知
 +
 +
==裸机核心知识(目标①②)(学习时间:1周)==
 +
:学习新1期视频,下载地址:http://wiki.100ask.net/,存放位置为:
 +
005_ARM裸机1期加强版(156节,23节免费,已完结)
 +
:学习第010课到第014课:
 +
==Linux内核中断体系及APP与内核交互(目标③④⑤)(学习时间:2周)==
 +
:学习以下衔接课程,下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
 +
:只学习其中的第5课的部分内容,学习第005课中的第006~第011节:
 +
 +
=四周掌握输入子系统_Framebuffer_APP基本编程=
 +
 +
:面向对象:具备了基本驱动开发能力并且希望驱动和应用兼顾的人
 +
:目标:掌握输入子系统驱动开发、掌握Framebuffer驱动开发、掌握基本APP编程能力
 +
:时长:4周
 +
:过程:
 +
::① 学习裸机触摸屏编程(只要求理解原理,不要求能写出来)
 +
::② 编写Linux输入子系统驱动开发:按键、触摸屏
 +
::③ 学习裸机LCD编程(只要求理解原理,不要求能写出来)
 +
::④ 编写Linux下的LCD Framebuffer驱动
 +
::⑤ 练习Linux下APP编程
 +
 +
:有同学提问:
 +
::老师我看您在这一阶段目标中非常侧重LCD学习,
 +
::但感觉还是有很多项目开发用不到LCD和触摸屏。
 +
:{{Redtext |答}}:
 +
::这阶段的学习涉及触摸屏、LCD,
 +
::请注意:不是让你去关注触摸屏、LCD的硬件操作,
 +
::而是输入子系统、LCD的驱动跟之前写的LED、按键驱动不一样,
 +
::它们借助于内核现有的代码来实现,
 +
::你要体会这种“基于某个子系统编写驱动”的思路。
 +
 +
::而APP编程里,也不是让你去关注硬件的操作,
 +
::而是要关注很多接口函数:比如文件读写、多线程、网络,poll。
 +
::当然如果你本身对APP编程已经有经验了,那没必要学习本阶段的APP编程。
 +
 +
==Linux输入子系统的驱动开发(目标①②)(学习时间:1周)==
 +
:学习新1期视频,下载地址:http://wiki.100ask.net/,存放位置为:
 +
005_ARM裸机1期加强版(156节,23节免费,已完结)
 +
:学习第018课(能理解硬件操作即可,不要求能自己写出来):
 +
 +
 +
:然后学习第2期中第002、003、005课:
 +
008_韦东山第2期驱动大全视频(81节,6节免费 ,已完结)
 +
 +
 +
== LCD Framebuffer驱动开发(目标③④)(学习时间:1周)==
 +
:学习新1期视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
005_ARM裸机1期加强版(156节,23节免费,已完结)
 +
:学习第017课,掌握LCD的硬件操作原理,不要求能写出裸机程序:
 +
 +
 +
:然后学习第2期中第004课,最好自己写一下驱动:
 +
008_韦东山第2期驱动大全视频(81节,6节免费 ,已完结)
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
== Linux下APP编程(目标⑤)(学习时间:2周)==
 +
:第3期的第1个项目,涉及大量的Linux APP编程。里面含有Makefile、多线程、网络等很多知识。
 +
:对于初学者,可以先不管Makefile。
 +
:对于初学者,也可以先不管过于复杂的“数码相框项目”。
 +
① 前期准备:
 +
:第3期不再使用2.6.22.6内核,而是使用linux 3.4.2;
 +
:第3期使用工具链arm-linux-gcc 4.3.2;
 +
:第3期使用新的文件系统:fs_mini_mdev_new。
 +
:请注意上述3点。
 +
::下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
 +
010_韦东山Linux_第3期视频_项目实战(适用任意Linux板,111节,6节免费,已完结)
 +
  3期视频(含相应的文档与源码)
 +
    项目1_文件浏览器_数码相框(33节, 2节免费)
 +
        资料
 +
            数码相框固件.rar
 +
 +
:下载解压“数码相框固件.rar”,可以使用其中的:
 +
数码相框文件系统
 +
  3.4.2内核
 +
  映象文件:u-boot.bin,uImage_digitpic,fs_mini_mdev_new_digitpic.yaffs2
 +
 +
:工具链也在“数码相框固件.rar”里。
 +
 +
② 视频学习:
 +
:在PC上的实验都可以不做,以前之所以录制在PC做实验是为了方便,但是后来发现并不方便。特别是64位ubuntu系统不支持那些实验。
 +
:Makefile的知识挺复杂,可以只使用我们提供的Makefile,不需要深入理解。
 +
:数码相框的代码过于复杂,理解“面向对象编程”的思想即可,不需要去钻研里面的代码。
 +
:这部分视频的学习,是为了让你掌握基本的Linux APP编程。
 +
 +
 +
:视频下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
010_韦东山Linux_第3期视频_项目实战(适用任意Linux板,111节,6节免费,已完结)
 +
  3期视频(含相应的文档与源码)
 +
    项目1_文件浏览器_数码相框(33节, 2节免费)
 +
        视频
 +
=入门之后=
 +
入门之后,请按需学习。
 +
 +
== 驱动程序的学习==
 +
=== 按需学习===
 +
:学习完某个硬件的裸机视频,就学习对应的Linux驱动视频。
 +
:比如学习完裸机的I2C视频,就可以学习Linux I2C驱动视频。
 +
:不需要把裸机视频全部学习了,再去开始学习驱动。
 +
:我们的驱动视频非常多,以第2期为核心来学习。
 +
:第3期中的摄像头、ALSA声卡驱动特别庞大复杂,你工作中涉及时再学习吧。
 +
 +
 +
 +
===检验学习成果:移植到新的内核上去===
 +
:视频里大部分驱动是基于linux 2.6.22.6来录制的,但是所讲的知识可以在新内核上无缝使用。
 +
:你可以尝试把视频中的驱动移植到linux 3.4.2去,我们有示例视频:
 +
009_UBOOT移植_LINUX移植_驱动移植(19节, 全部免费,已完结)
 +
 +
===设备树===
 +
:有一种错误的观点,说“新驱动都是用设备树来写了”。
 +
:{{Redtext | 设备树不可能用来写驱动}}。请想想,要操作硬件就需要去操作复杂的寄存器,如果设备树可以操作寄存器,那么它就是“驱动”,它就一样很复杂。
 +
:设备树只是用来给内核里的驱动程序,提供硬件的信息。比如LED驱动,在内核的驱动程序里去操作寄存器,但是操作哪一个引脚?这由设备树指定。
 +
:我们的驱动视频是基于linux 2.6.22.6录制的,但是那些知识在最新的内核上也完全没有变。
 +
:我们录制了设备树的视频,使用linux 4.19版本的内核:
 +
018_设备树详解(29节,4节免费,已完结)
 +
 +
 +
== u-boot的学习==
 +
:u-boot是很复杂的,它是一个裸机程序的集大成者,如果你的工作不涉及u-boot开发,可以先不学习它,会使用就可以了。
 +
 +
:复杂在于它的启动流程,在于它支持很多的设备,比如支持网卡、SD卡、Flash。
 +
:但是,我们要记住它的核心功能:启动内核。
 +
 +
:所以,学习u-boot时,要掌握2点:
 +
::1. u-boot本身怎么启动?重定位、把自己从Flash中读到内存里,需要理解这些知识
 +
::2. 怎么去读出Flash上的内核:
 +
这会涉及u-boot中Flash的驱动,
 +
但是我们可以只关注u-boot提供的命令,比如使用”nand read …”命令来读;
 +
而不需要关注“nand read”命令的实现
 +
:3. 怎么启动内核。
 +
 +
怎么学习u-boot?
 +
 +
=== 先学习怎么使用===
 +
:学习以下课程,下载地址:http://wiki.100ask.net/ 存放位置为:
 +
06_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
 +
=== u-boot过于复杂,我们先学习自己写一个bootloader===
 +
====先学习重定位====
 +
:学习新1期视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
005_ARM裸机1期加强版(156节,23节免费,已完结)
 +
 +
====再学习Nand Flash操作====
 +
学习新1期视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
005_ARM裸机1期加强版(156节,23节免费,已完结)
 +
====现在,从0写bootloader====
 +
:学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
 +
===可以研究u-boot 1.1.6了===
 +
:学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
 +
===试试自己移植===
 +
:学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
009_UBOOT移植_LINUX移植_驱动移植(19节, 全部免费,已完结)
 +
=Linux内核的学习=
 +
我目前的视频里,对内核的讲解并不多。
 +
我认为内核就是各类驱动的集合。
 +
但是,你可以理解一下内核的启动流程,尝试移植一下内核。
 +
==理解内核启动流程==
 +
:学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
 +
==移植新内核==
 +
:学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
 +
009_UBOOT移植_LINUX移植_驱动移植(19节, 全部免费,已完结)
 +
 +
 +
 +
=应用开发的学习=
 +
:第3期的第1个项目,建议观看其中的全部视频。
 +
::1. 掌握各类基础技能:多线程、网络等等
 +
::2. 掌握面向对象的编程思想
 +
::3. 不要陷于细节,比如“数码相框”中对图像着处理、坐标的变换,这些很复杂,不用管它。
 +
“数码相框”名字比较老土了,但是里面的知识还是APP开发的基础。
 +
在这个项目里,我们还实现了电子书、文件浏览器。文件浏览器就比较高大上了。
 +
 +
:第3期的第2个项目中的内容非常多,有摄像头、ALSA声卡、WIFI网卡使用、3G上网卡等等,按需学习。
 +
:可以看看里面的摄像头应用编程,至于其中的摄像头驱动太复杂了,你用到时再看。
 +
 +
:第3期的第3个项目是电源管理,理解一下概念即可,不用看。

2019年11月25日 (一) 19:01的版本

  1. 三周从STM32入门Linux
  2. 三周掌握Linux驱动基本技能
  3. 四周掌握输入子系统_Framebuffer_APP基本编程
  4. 入门之后
123部分如果全天学习的话,最快的学习时间是10周;你可以给自己加点余量,争取3、4个月搞定。

1. 三周从STM32入门Linux

面向对象:掌握C语言、STM32单片机开发的人
目标:快速入门Linux驱动开发,掌握简单的LED、按键驱动开发
时长:3周
过程:
① 掌握ubuntu常用操作
② 掌握在ubuntu下开发单片机程序,跟STM32的开发有一个对比
③ 掌握u-boot的使用(无需了解代码,但是要会编译、烧写u-boot)
④ 掌握Linux内核的配置、编译、烧写
⑤ 掌握文件系统的结构,会烧写我们构建好的文件系统(不要求会自己编译)
⑥ 编写LED驱动、编写按键驱动

1.1 基于Ubuntu开发裸机(目标①②)(学习时间:1周)

学习新1期视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
005_ARM裸机1期加强版(156节,23节免费,已完结)
只学习前面9课:

文件:图片 1.png

1.2 ARM板系统的基本使用(目标③④⑤)(学习时间:1周)

学习以下衔接课程,下载地址:http://wiki.100ask.net/,存放位置为:

06_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
注意1:这部分视频中涉及u-boot的源码分析,因为未学习第1期中的代码重定位等知识,所以不要看源码分析,只要学会:编译、烧写、使用u-boot就可以。
注意2:这部分视频中涉及内核的部分源码分析,不要求掌握这些源码,只要学会:大概了解内核启动过程做了什么事、会编译、烧写、使用uImage就可以。
注意3:这部分视频中涉及根文件系统之busybox的编译,照着操作就可以了。
只学习其中的1、3、4课(搭建开发环境时,需要阅读JZ2440开发板使用手册):

1.3 Linux基础驱动程序(目标⑥)(学习时间:1周)

学习以下衔接课程,下载地址:http://wiki.100ask.net/,存放位置为:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
只学习其中的第5课,基于快速入门的目的,第5课不需要全部学完,只需要学习前5节视频:

三周掌握Linux驱动基本技能

面向对象:已经会编译第1个LED裸板程序、第1个LED驱动的人
目标:快速入门Linux驱动开发,掌握简单的LED、按键驱动开发
时长:3周
过程:
① 掌握裸机重定位(这有助于后续理解u-boot)
② 掌握裸机中断处理流程
③ 掌握Linux异常、中断处理体系
④ 编写Linux下的按键驱动程序
⑤ 掌握Linux中驱动和应用程序的交互方式:查询、中断-唤醒、poll、异步通知

裸机核心知识(目标①②)(学习时间:1周)

学习新1期视频,下载地址:http://wiki.100ask.net/,存放位置为:
005_ARM裸机1期加强版(156节,23节免费,已完结)
学习第010课到第014课:

Linux内核中断体系及APP与内核交互(目标③④⑤)(学习时间:2周)

学习以下衔接课程,下载地址:http://wiki.100ask.net/ ,存放位置为:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
只学习其中的第5课的部分内容,学习第005课中的第006~第011节:

四周掌握输入子系统_Framebuffer_APP基本编程

面向对象:具备了基本驱动开发能力并且希望驱动和应用兼顾的人
目标:掌握输入子系统驱动开发、掌握Framebuffer驱动开发、掌握基本APP编程能力
时长:4周
过程:
① 学习裸机触摸屏编程(只要求理解原理,不要求能写出来)
② 编写Linux输入子系统驱动开发:按键、触摸屏
③ 学习裸机LCD编程(只要求理解原理,不要求能写出来)
④ 编写Linux下的LCD Framebuffer驱动
⑤ 练习Linux下APP编程
有同学提问:
老师我看您在这一阶段目标中非常侧重LCD学习,
但感觉还是有很多项目开发用不到LCD和触摸屏。
这阶段的学习涉及触摸屏、LCD,
请注意:不是让你去关注触摸屏、LCD的硬件操作,
而是输入子系统、LCD的驱动跟之前写的LED、按键驱动不一样,
它们借助于内核现有的代码来实现,
你要体会这种“基于某个子系统编写驱动”的思路。
而APP编程里,也不是让你去关注硬件的操作,
而是要关注很多接口函数:比如文件读写、多线程、网络,poll。
当然如果你本身对APP编程已经有经验了,那没必要学习本阶段的APP编程。

Linux输入子系统的驱动开发(目标①②)(学习时间:1周)

学习新1期视频,下载地址:http://wiki.100ask.net/,存放位置为:
005_ARM裸机1期加强版(156节,23节免费,已完结)
学习第018课(能理解硬件操作即可,不要求能自己写出来):


然后学习第2期中第002、003、005课:
008_韦东山第2期驱动大全视频(81节,6节免费 ,已完结)

LCD Framebuffer驱动开发(目标③④)(学习时间:1周)

学习新1期视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
005_ARM裸机1期加强版(156节,23节免费,已完结)
学习第017课,掌握LCD的硬件操作原理,不要求能写出裸机程序:


然后学习第2期中第004课,最好自己写一下驱动:
008_韦东山第2期驱动大全视频(81节,6节免费 ,已完结)





Linux下APP编程(目标⑤)(学习时间:2周)

第3期的第1个项目,涉及大量的Linux APP编程。里面含有Makefile、多线程、网络等很多知识。
对于初学者,可以先不管Makefile。
对于初学者,也可以先不管过于复杂的“数码相框项目”。

① 前期准备:

第3期不再使用2.6.22.6内核,而是使用linux 3.4.2;
第3期使用工具链arm-linux-gcc 4.3.2;
第3期使用新的文件系统:fs_mini_mdev_new。
请注意上述3点。
下载地址:http://wiki.100ask.net/ ,存放位置为:
010_韦东山Linux_第3期视频_项目实战(适用任意Linux板,111节,6节免费,已完结)
 3期视频(含相应的文档与源码)
    项目1_文件浏览器_数码相框(33节, 2节免费)
        资料
            数码相框固件.rar
下载解压“数码相框固件.rar”,可以使用其中的:
数码相框文件系统
 3.4.2内核
  映象文件:u-boot.bin,uImage_digitpic,fs_mini_mdev_new_digitpic.yaffs2
工具链也在“数码相框固件.rar”里。

② 视频学习:

在PC上的实验都可以不做,以前之所以录制在PC做实验是为了方便,但是后来发现并不方便。特别是64位ubuntu系统不支持那些实验。
Makefile的知识挺复杂,可以只使用我们提供的Makefile,不需要深入理解。
数码相框的代码过于复杂,理解“面向对象编程”的思想即可,不需要去钻研里面的代码。
这部分视频的学习,是为了让你掌握基本的Linux APP编程。


视频下载地址:http://wiki.100ask.net/ ,存放位置为:
010_韦东山Linux_第3期视频_项目实战(适用任意Linux板,111节,6节免费,已完结)
 3期视频(含相应的文档与源码)
    项目1_文件浏览器_数码相框(33节, 2节免费)
        视频

入门之后

入门之后,请按需学习。

驱动程序的学习

按需学习

学习完某个硬件的裸机视频,就学习对应的Linux驱动视频。
比如学习完裸机的I2C视频,就可以学习Linux I2C驱动视频。
不需要把裸机视频全部学习了,再去开始学习驱动。
我们的驱动视频非常多,以第2期为核心来学习。
第3期中的摄像头、ALSA声卡驱动特别庞大复杂,你工作中涉及时再学习吧。


检验学习成果:移植到新的内核上去

视频里大部分驱动是基于linux 2.6.22.6来录制的,但是所讲的知识可以在新内核上无缝使用。
你可以尝试把视频中的驱动移植到linux 3.4.2去,我们有示例视频:
009_UBOOT移植_LINUX移植_驱动移植(19节, 全部免费,已完结)

设备树

有一种错误的观点,说“新驱动都是用设备树来写了”。
设备树不可能用来写驱动。请想想,要操作硬件就需要去操作复杂的寄存器,如果设备树可以操作寄存器,那么它就是“驱动”,它就一样很复杂。
设备树只是用来给内核里的驱动程序,提供硬件的信息。比如LED驱动,在内核的驱动程序里去操作寄存器,但是操作哪一个引脚?这由设备树指定。
我们的驱动视频是基于linux 2.6.22.6录制的,但是那些知识在最新的内核上也完全没有变。
我们录制了设备树的视频,使用linux 4.19版本的内核:
018_设备树详解(29节,4节免费,已完结)


u-boot的学习

u-boot是很复杂的,它是一个裸机程序的集大成者,如果你的工作不涉及u-boot开发,可以先不学习它,会使用就可以了。
复杂在于它的启动流程,在于它支持很多的设备,比如支持网卡、SD卡、Flash。
但是,我们要记住它的核心功能:启动内核。
所以,学习u-boot时,要掌握2点:
1. u-boot本身怎么启动?重定位、把自己从Flash中读到内存里,需要理解这些知识
2. 怎么去读出Flash上的内核:

这会涉及u-boot中Flash的驱动, 但是我们可以只关注u-boot提供的命令,比如使用”nand read …”命令来读; 而不需要关注“nand read”命令的实现

3. 怎么启动内核。

怎么学习u-boot?

先学习怎么使用

学习以下课程,下载地址:http://wiki.100ask.net/ 存放位置为:
06_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)

u-boot过于复杂,我们先学习自己写一个bootloader

先学习重定位

学习新1期视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
005_ARM裸机1期加强版(156节,23节免费,已完结)

再学习Nand Flash操作

学习新1期视频,下载地址:http://wiki.100ask.net/ ,存放位置为: 005_ARM裸机1期加强版(156节,23节免费,已完结)

现在,从0写bootloader

学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)

可以研究u-boot 1.1.6了

学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)

试试自己移植

学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
009_UBOOT移植_LINUX移植_驱动移植(19节, 全部免费,已完结)

Linux内核的学习

我目前的视频里,对内核的讲解并不多。 我认为内核就是各类驱动的集合。 但是,你可以理解一下内核的启动流程,尝试移植一下内核。

理解内核启动流程

学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)

移植新内核

学习视频,下载地址:http://wiki.100ask.net/ ,存放位置为:
009_UBOOT移植_LINUX移植_驱动移植(19节, 全部免费,已完结)


应用开发的学习

第3期的第1个项目,建议观看其中的全部视频。
1. 掌握各类基础技能:多线程、网络等等
2. 掌握面向对象的编程思想
3. 不要陷于细节,比如“数码相框”中对图像着处理、坐标的变换,这些很复杂,不用管它。

“数码相框”名字比较老土了,但是里面的知识还是APP开发的基础。 在这个项目里,我们还实现了电子书、文件浏览器。文件浏览器就比较高大上了。

第3期的第2个项目中的内容非常多,有摄像头、ALSA声卡、WIFI网卡使用、3G上网卡等等,按需学习。
可以看看里面的摄像头应用编程,至于其中的摄像头驱动太复杂了,你用到时再看。
第3期的第3个项目是电源管理,理解一下概念即可,不用看。