嵌入式 Linux 入门笔记
½者:阿南
嵌入式Linux入门笔记.....................................................................................................................1
前言...........................................................................................................................................3
第一阶段 在PC机上学习熟悉Linux.......................................................................................3
一.Red
Hat Linux 9
下的常用操½
...............................................................................4
二.Minicom的½用
........................................................................................................6
三.NFS的½用
...............................................................................................................6
四.应用程序编程实验...................................................................................................7
五.模块编程实验...........................................................................................................7
六.简单的字符设备驱动实验.......................................................................................8
第二阶段 在开发板上学习研究Linux.................................................................................10
一.MIZI
Linux SDK for S3C2410
开发环境及工具½用
..........................................11
1. 构造½件开发环境...........................................................................................11
2. 编译嵌入式Linux生成image...........................................................................12
3. 将嵌入式Linux的image下½½到目标板
...........................................................14
4. 嵌入式平台测试...............................................................................................21
二.嵌入式Linux驱动开发
...........................................................................................22
1. 模块编程实验...................................................................................................22
2. 点亮目标板的LED.............................................................................................23
3.按键中断实验...................................................................................................28
4.定时器驱动及PWM输出.....................................................................................33
5.点亮目标板LCD.................................................................................................38
6.安装触摸板.......................................................................................................41
三.构建完整的嵌入式Linux系统
...............................................................................42
1.桌面系统的启动...............................................................................................42
2.下½½可读写的文件系统Yaffs.........................................................................42
3.Yaffs文件系统移植.........................................................................................44
4.Yaffs½为根文件系统启动.............................................................................52
5.完整的嵌入式Linux系统.................................................................................53
四.嵌入式WEB服务器................................................................................................53
1.Boa移植.............................................................................................................53
2.WEB应用开发.....................................................................................................55
五.NFS的配½
.............................................................................................................57
1.主机的NFS服务器配½.....................................................................................57
2.目标机的NFS客户端配½.................................................................................58
3.出现的问题.......................................................................................................58
第三阶段 在项目中应用Linux.............................................................................................58
一. 进程间隔定时器...................................................................................................59
1.概念...................................................................................................................59
2.数据结构...........................................................................................................59
3.操½½数...........................................................................................................60
4.测试程序...........................................................................................................60
二.虚拟地址.................................................................................................................61
三.以太½控制器
—— CS8900A硬件调试 ..............................................................62
1.调试步骤...........................................................................................................62
2.出现过的问题...................................................................................................63
四.WiFi无线½络.........................................................................................................63
1.在RedHat9 上安装TL-WN210 无线½卡驱动
...................................................64
2. 无线½络配½...................................................................................................67
3.RedHat9 上½用WL-110 无线½卡...................................................................71
4.无线½卡控制器PD6710 硬件测试
..................................................................76
5.Linux下驱动程序及装½½.................................................................................81
五.CPLD扩展外部设备...............................................................................................88
1.扩展I/O.............................................................................................................88
2.扩展串口 16C554..............................................................................................94
六.PWM驱动蜂鸣器
.................................................................................................109
1.驱动源码.........................................................................................................109
2.驱动测试程序.................................................................................................112
3.出现过的问题.................................................................................................112
七.485 ½络驱动........................................................................................................113
1.硬件测试.........................................................................................................113
2.Linux驱动程序...............................................................................................118
3.驱动测试程序.................................................................................................121
4.出现的问题.....................................................................................................123
八.红外学习与发射...................................................................................................125
1.硬件测试程序.................................................................................................125
2.Linux驱动程序...............................................................................................130
3.驱动测试程序.................................................................................................135
4.出现的问题.....................................................................................................137
5.总结.................................................................................................................137
九.½络编程...............................................................................................................137
1.常用½数.........................................................................................................137
2.服务器程序.....................................................................................................146
3.测试用客户程序.............................................................................................151
4.利用IO复用替代多进程的并发服务器
.........................................................152
5.用无线½络测试上述程序.............................................................................155
十.系统时间的实现...................................................................................................155
十一.关于进程的½会...............................................................................................156
1.进程间不共享变量.........................................................................................156
2.进程通信——信号的½用.............................................................................157
3.防止僵死进程.................................................................................................159
第四阶段 用户图½界面设计.............................................................................................159
一.QT应用编程
.........................................................................................................159
二.Qt/Embedded和QTOPIA
......................................................................................159
1.Linuette平台.................................................................................................159
2.QTE 2.3.7 / Qtopia 1.7.0.........................................................................162
3. QTE 2.3.12 / Qtopia PDA 2.2.0
...............................................................168
4.linuette的root、root_english、usr比较..........................................................172
后记.......................................................................................................................................174
前言
很多朋友(无论是单片机出身的底层½件工程师还是 PC 机的 Windows 程序员)½很想学习 Linux(觉
得只有嵌入式 Linux 才有钱途,
而我觉得无论什么,
只要比别人做的½,
½会有前途) 同时却觉得它很难,
,
把它神密化了(就象½初神密化 ARM 一样)
,还认为必须要先买个 ARM 开发板才½开始 Linux 的学习,或问
是否应先装个虚拟机等等,然后一直在徘徊着(时间就这样一天天过去了)
!我讨厌徘徊,宁可花时间去尝
试失败,然后总结经验。这½笔记基本上按时间顺序记½了我刚接触 Linux 到对它有个整½认识的学习、
调试过程,出现的问题及心得总结等,也是我平时工½中不可缺少的手册。本想按内容重新整理,½后来
还是保持着原来的时间顺序,因为觉得这样更容易让初学者借鉴学习过程和方法。Linux,我还只是一个新
手,所以一定会有很多错误,很多非常不恰½的想法和问题,肯请见谅和批评指正!如果觉得它对您有帮
助,甚至非常的棒,请您写信(ccn422@hotmail.com)告诉我,以给我最大的鼓励!如果您想表示感谢,
那么请您上 21IC BBS 的 ARM 论坛,和我一起帮助那些需要帮助的朋友吧!我知道中½足球很差,½还会一
如既往的关注和支持!自己也会执着的½出时间,千方百计的寻找踢球机会,培养激情。同样,也知道中
½的电子技术环境不½,½还会执着½求、学习下去,发表心得与大伙共勉。亲爱的工程师们,让我们象
伊拉克足球一样战斗吧!!
!
第一阶段 在 PC 机上学习熟悉 Linux
刚学会 ARM 不久,就遇到很多工程师在学习和½用 Linux,½时很是½奇和羡慕!注意到几乎所有工
程师½拥有《GNU/Linux 编程指南》
,故也买来收藏着,看了些介绍性的篇幅,也有了在 PC 机上装个 Linux
系统的念头。由于对 RedHat 还不了解,包括基本的操½,于是买了本《Redhat9.0 入门》
,在电脑城找了
张 Readhat9.0 光盘(现在肯定找不到了,去½上下吧)
,还担心在原来硬盘上安装会破坏原来的数据(担
心是多½的,后来½用 PartitionMagic 在原盘符下直接分区)
,于是花了 75 元买了 8.4G 的旧硬盘,就这
样回家瞎玩起来。后来又买了本《Redhat9.0 系统管理》
,应付 RedHat9.0 的基本操½已经足够。熟悉一两
个星期的 Redhat9.0 基本操½与环境后,是该玩点深入的东东了,觉得自己将来应该是先以嵌入式 Linux
驱动为主,而不是应用编程,所以在还没有进一步学习《GNU/Linux 编程指南》的情况下,就买《Linux 设
备驱动程序》钻研(后来证明这是错误的,有些急功近利)《Linux 设备驱动程序》看的比较费劲,通读
。
了一遍后,在 PC 机做的第二个实验就遇到了困难,编译总是出错。去书店参考其它驱动的书,上½查找等
试了很多方法½没有解决,
困惑了很久。
后来又开始研读
《GNU/Linux 编程指南》 读了这本书, 《Linux
,
再翻
设备驱动程序》就½松多了。问题没有解决总会有个结,会时常有针对性的去书店翻些相关的书,上½查
些资料等。在了解到了内核源码树结构,编译等之后,才知道驱动和应用程序是有区别的,是属于内核级,
在编译时要指定 Linux 内核源代码树下的头文件(–I/usr/src/linux-2.4/include)
,问题就这样解决,
以后的学习、实验½变得顺利了,出现问题基本½½很快排除。总结这阶段的学习顺序,我觉得应该是:
首先,在 PC 机上安装 Linux 系统,再买本相应的入门书籍,主要是熟悉 Linux 环境,学习常用的½令和操
½(不一定多,基本、常用的就可以,以后在½用过程中慢慢积累)
,理解各目½结构与½用等。其次,学
习在 Linux 环境下编程,
《GNU/Linux 编程指南》就可,它会介绍文件描述符的概念,打开、读、写等操½
的系列基础知识,没有这些基础而直接看《Linux 设备驱动程序》会觉得累。后来研读了《UNIX 环境高级
编程》
,觉得也很½,它讲了很多前者没有的细节。再次,拿本内核的书翻翻,了解一下 linux 内核源代码
树的目½结构,编译等。最后学习《Linux 设备驱动程序》
,理解驱动程序的结构框架等。注:我觉得学习
不需要½直接记½,有点不现实(½应该理解,不要留下疑问,如果有,应及时的用实验去证实再记½)
,
在以后的应用中再查阅巩固,这阶段也不例外。
一.Red Hat Linux 9 下的常用操½
1. 如½修改在开机引导装½½程序中,等待自动登½默认操½系统的时间?
答:如果引导装½½程序是 GRUB,则修改/etc/grub.conf 文件中的 timeout=秒数。
如果引导装½½程序是 LILO, 则修改的是/etc/lilo.conf 文件。可用 vi 等编辑器修改,下同。
2. 在字符(Text)模式下,如½关机、重启、注销?
答:
关机:
poweroff 或 shutdown –h now;
重启:
reboot 或 shutdown –r now; (即重新登入) logout;
注销
:
其中在 shutdown 指令中的 now 是指现在就执行,也可以指定多少时间后再执行此½令。
3. U 盘的½用
答:先创建/mnt/usb 目½,再执行 mount /dev/sda1 /mnt/usb 挂½½,此时/mnt/usb 就是 U 盘的目½,在
拔出 U 盘时要执行 umount /mnt/usb 进行卸½½。
4. 在字符模式(Text)下,
如½进入 X Window 模式
(Graphic)
?在 X Window 模式下,
如½返回字符模式?
答:执行 startx ½令 启动 X Window 模式;鼠标点击“Main Menu(主菜单)->Log out(注销)”打开对话框
中,选择“注销”进入字符模式;或 CRTL+ALT+F1~F6 来进入不同的虚拟控制台(即文本模式下)
。
5. 如½重新指定开机默认进入的执行模式(字符或 X Window 模式)?
答:修改/etc/inittab 文件中的内容(id:5:initdefault:)
。
其中,5 表示以 X Window 模式(Graphic)登入,3 为字符模式(Text)登入
6. 在字符模式下,如½½用户登入时,系统不要求输入密码?如½恢复或更改用户密码?
答:取消输入密码:passwd –d
用户帐号。如要取消root登入时的密码,则执行passwd –d root。也可
以用vi打开/etc/shadow文件,删除密码的方法取消。恢复或更改密码则执行passwd 用户帐号(如果是取消
自己则不用)½令后会提示输入New password和Retype new password。
7. 字符模式下,如½新增用户帐号?
答:½用“useradd 用户帐号” ½令来增加,½在新增后还不½登入½用,还需要用 passwd ½令来设½
密码后才行。
8. 在 X Window 下,如½选择系统默认½用的语言?
答:鼠标点击“主菜单->系统设½->语言”打开选择语言对话框中选择。
9. 用 ls 等½令查看的内容太多,超过一页时,如½分页显示?
答:可用 ls | more 或 ls | less 进行分页查看。其中,在用 more 浏览时,按空格键(Space)则会显示
下一页的内容;按回½(Enter)键则会向下多显示一行;按 q 键则离开浏览模式。
在用 less 浏览时,按 h 键会出现在线½用说明;按 q 键离开浏览模式。
10.如½获得½令的½用方法?
答:可利用在线手册—man(Manual),用法是输入 man 和待查的½令名称。如要查询 ls ½令的½用方法,
则输入以下½令:man ls 。也可以 ls --help
11.搜索文件及目½和搜索包含特定字符串的文件?
答:搜索文件及目½可以用 find ½令,如要在根目½(/)上搜索 apache 文件则输入½令:find / -name
apache –print,注意:如果没有指定目½,则系统会以½前的目½为搜索的范围;搜索包含特定字符串的
文件可以用 grep ½令,如要在/etc 目½下搜索包含字符串“password”
的文件则输入:grep –n ‘password’ /etc/*.*,其中加入-n 参数会标出符合指定的字符串的列数,另
外不可指定在目½中搜索,否则会出现错误信息,如上述不½写成:grep –n ‘password’ /etc/
另外如果想停止搜索可以直接按“Ctrl + C”键结束该½令就可以。现在我常用:grep –ir password /etc
12.控制台间的切换
答:在文本模式下,用 ALT+F1~F6 来分别在 6 个虚拟控制台间切换,它们可分别用不同的用户名登入和执
行不同的½令与程序,如果已经启动了 X Window(如:在文本模式下用”startx”½令启动),则按 ALT+F7
切换到 X Window 图½模式。
在 X Window 图½模式下,用 CRTL+ALT+F1~F6 分别切换到文本模式下的 6 个虚拟控制台。CRTL + ALT +
BackSpace 结束图½模式。
因为 linux 是多任务的系统,所以可以在不同的控制台下用不同(或同一)的用户登陆来运行不同的程序。
我觉得这个功½很方便,因为有时在文本模式下,需要打开多个终端来处理显示多个的任务,如:一个终
端运行 minicom ½为目标板的控制,一个终端½为宿主机编译目标板要运行的文件,还有多个终端打开多
个源文件在浏览等等。如果习惯在 X Window 模式下就例外,因为用鼠标右键就可以打开多个终端。
13.查看 PDF 文档和浏览½页?
答:在 X Window 下打开 shell 终端,输入”xpdf
14.查看磁盘½用情况
答:#df –h
15./proc 目½下,几个关于系统资源非常有用的文件
/proc/modules、/proc/ioports、/proc/iomen、/proc/devices、/proc/interrupts、/proc/filesystems
16.关于内核代码调试时输出打印信息的 printk 语句
如:printk(KERN_DEBUG “Here I am : %s :%i\n”,__FILE__, __LINE_&_) ;
printk(KERN_INFO “ Driver Initional \n”) ; 等 同 于 printk(“<6>” “ Driver Initional
\n”) ;
printk( “<1> Hello, World!\n”) ;
没有指定优先级的 printk 语句采用默认日志级别(DEFAULT_MESSAGE_LOGLEVEL)在 kernel/printk.c 中被指
定,根据日志级别,内核可½会把消息输出到½前控制台上。½优先级小于 console_loglevel 整数值时,
消息才会被显示出来。如果系统同时运行了 klogd 和 syslogd,则无论 console_loglevel 为½值,½将把
内核消息½加到/val/log/messages 中。console_loglevel 的初始值是 DEFAULT_CONSOLE_LOGLEVEL,可以
通过文本文件/proc/sys/kernel/printk 来读取和修改它及控制台的½前日志级别等。也可以简单的输入
下面½令½所有的内核消息得到显示:
#echo 8 > /porc/sys/kernel/printk
17.查看½前正在运行的进程
答:#ps
18.解压缩到指定目½
答:#tar xvzf linutte.tgz –C /linuette
19.½/etc/grub.conf 文件中的内容被修改或破坏时不½正常启动时,如½在 GRUB 引导时修改设½½其
正常启动
答:以修改了/etc/grub.conf 文件中的 vga 项½启动时显示器不½显示为例,在 GRUB 启动引导菜单中
windows XP 和 Red Hat Linux(2.4.20-8)两项中½用键头键选中 linux 系统,不按[Enter],而按[E]键进
入菜单项目编辑器,再½用键头键选中 kernel 项,也按[E]键进行编辑,在行的后面输入 vga=791 fb=on
后按[Enter],最后按[b]键执行½令,并引导操½系统。
20.包管理器 RPM ½用,以 tmake 为例
安装:#rpm
–ivh tmake-1.7-3mz.noarch.rpm
filename.pdf”和“mizzo filename.html” ½令分
别查看。注:必须在 X Window 下才½运行这两个程序,文本模式不½运行。
评论