本书是面向嵌入式Linux学习和产品开发的入门教程,分3篇,共18章,围绕嵌入式Linux产品开发的应用编程展开,内容涵盖Linux操作系统介绍、安装和基本使用、嵌入式Linux开发平台以及
嵌入式Linux的应用编程.全面介绍了嵌入式Linux产品应用开发的方方面面,包括应用基础、文件和I/O操作、进程和线程、外围硬件接口编程、串口编程、网络编程、Qt编程和Shell编程.
本书由浅入深、结构合理、图文并茂,可操作性强,读者可跟着一步步进行操作和学习,非常适合
嵌入式Linux开发初级工程师及准备往嵌入式Linux方向发展的电子工程师和单片机工程师使用,也可作为高校非计算机专业高年级学生学习嵌入式Linux的参考教材.
时光荏苒,白驹过隙.如果时光能够倒流,回到10年前,对于那时的嵌入式工程师,掌握1~2种单片机,能用汇编或者C编写应用程序,就是合格的嵌入式工程师;倒回到5年前,能掌握1~2种ARM 处理器,能用C编写应用程序,同样也是合格的嵌入式工程师.而如今,如果仅仅具备上述技能,恐怕很难成为企业所需要的嵌入式技术核心人才,这绝非危言耸听,笔者就曾见过有的企业招聘硬件工程师要求能写Linux驱动,尽管这只是少数个案,但至少反映了一种趋势.时代的进步迫使我们不得不学习和掌握新的技能,以跟上时代的脚步,适应企业的发展.掌握一种嵌入式操作系统,几乎成为嵌入式工程师的标配技能.在新时期如何转型,也成为摆在很多嵌入式工程师面前的一道难题.嵌入式系统多彩纷呈,一直角逐不断,近些年嵌入式Linux势头强劲,成为事实上的热门.
市面上已经有很多Linux或者嵌入式Linux的书籍,可谓汗牛充栋,但能够让初学者快速掌握嵌入式Linux的“葵花宝典”不多.也正因为此,很多人觉得嵌入式Linux很难,也让不少人望而却步.本书正是为破解这样的困局而写,从浩瀚的Linux知识海洋中,精挑细选,将必要的、最有用的知识点呈现出来.本书不求让读者能够精通嵌入式Linux,只求能帮助读者快速进入嵌入式Linux的大门.所谓“师傅领进门,修行在个人”;本书也不奢望能让读者学到嵌入式Linux的全部,只希望能成为嵌入式工程师往嵌入式Linux道路上转型的领路人.Linux海洋浩瀚无垠,嵌入式Linux也是广袤无边,在嵌入式Linux的世界里,学习只有起点,没有终点.
本书由多位具有多年嵌入式Linux工作经验的资深工程师编写,与工程应用紧密结合,具有以下特色:
取舍有度,针对性强.从始至终都围绕嵌入式Linux开发而展开,抛开无关内容.Linux包罗万象,进行Linux相关开发,如果没有很强的针对性和目的性,很容易在Linux浩淼的海洋中迷失,如何从中获取最有用的知识并用于学习和产品开发,这需要有人指引.本书就可以提供这样的指引.例如在介绍Linux命令部分,仅仅针对性地介绍了嵌入式Linux开发的常用命令,而不是像一般书籍那样介绍全部的Linux操作命令.
紧贴实际,实用性强.本书所介绍的全部知识点以及工具,都能在实际应用中发挥有效作用,有不少内容是笔者多年开发经验的积累总结.例如,本书介绍Linux的命令,并非遵循常规介绍方式,对命令的各种用法进行逐一介绍,而是根据实际应用,介绍最实用的方法.
图文并茂,可读性强.本书插图分两类,一类用于辅助内容理解,另一类用于直观显示实际操作和结果.配备的插图与内容相得益彰,极大增强了可读感和可读性.
本书分3篇共18章,各章节内容安排如下:
第一篇Linux基础,包括第1~6章,是进行嵌入式Linux开发的基础,介绍了Linux操作系统、安装和使用,还介绍了Vi编辑器以及嵌入式Linux开发环境的搭建.
第二篇EasyARM i.MX283A开发平台,包括第7~9章,介绍本书实际的操作平台,包括平台介绍、基本操作和系统固件烧写等内容.第三篇Linux应用编程,包括第10~18章,是本书的重点,全方位阐述了嵌入式Linux应用编程,内容涵盖LinuxC编程、文件I/O、Linux进程和线程、外围硬件编程、串口编程、网络编程、Qt编程以及Shell编程等方面.参与本书规划和编写的人员还有陈锡炳、张波、彭国文、华启延、张展威和沈桂廷等,在此一并表示感谢.
Linux是一个诞生、发展和壮大于网络的操作系统,网络上有无穷无尽的参考资料,本书在编写过程中也不可避免地参考或者引用了其中的内容,由于无法追溯到原作者,只能在此表示感谢.
由于编者水平有限,书中难免存在不足和错误,还望读者来信进行批评指正.
周立功
2015年11月21日
第一篇Linux基础
第1章Linux操作系统简介
1.1Linux内核
1.1.1简介
1.1.2特点
1.1.3内核版本号
1.1.4组成部分
1.2Linux发行版
1.3嵌入式Linux
1.3.1嵌入式Linux的特点
1.3.2嵌入式Linux的产品形态
第2章安装Linux操作系统
2.1获得Linux环境的三种方式
2.2发行版选择和ISO下载
2.3VMwarePlayer软件
2.3.1下载和安装
2.3.2设置虚拟化支持
2.4使用现成的虚拟机
2.5创建和配置虚拟机
2.5.1创建虚拟机
2.5.2虚拟机设置
2.6安装Ubuntu
2.6.1实体机安装前准备
2.6.2虚拟机安装前准备
2.6.3正式安装Ubuntu
2.7初识Ubuntu
2.7.1Ubuntu桌面
2.7.2输入法
2.7.3系统设置
2.7.4搜索软件和文件
2.7.5打开终端
2.7.6安装软件
第3章开始使用Linux
3.1LinuxShell
3.1.1Shell是什么
3.1.2Shell的种类和特点
3.2Linux常见命令
3.2.1导航命令
3.2.2目录操作命令
3.2.3文件操作命令
3.2.4网络操作命令
3.2.5安装和卸载文件系统
3.2.6使用内核模块和驱动
3.2.7重启和关机
3.2.8其他命令
3.3Shell文件
3.4Linux环境变量
3.4.1环境变量
3.4.2修改环境变量
第4章Linux文件系统
4.1Linux目录结构
4.1.1Linux目录树
4.1.2Linux目录树标准
4.2Linux的文件
4.2.1Linux文件结构
4.2.2Linux文件名称
4.2.3文件类型
4.3Linux文件系统
4.3.1Ext3文件系统特点
4.3.2Ext4文件系统特点
4.3.3其他文件系统
第5章Vi编辑器
5.1Vi/Vim编辑器
5.2Vi的模式
5.3Vim的安装
5.4启动和关闭Vi
5.5光标移动
5.6文本编辑
5.6.1文本输入
5.6.2文本处理
5.7配置Vi
5.8文件对比
第6章嵌入式Linux开发环境构建
6.1嵌入式Linux开发模型
6.1.1交叉编译
6.1.2交叉编译器
6.2安装交叉编译器
6.2.1解压工具链压缩包
6.2.2设置环境变量
6.3SSH服务器
6.3.1SSH能做什么
6.3.2安装SSH服务器
6.3.3测试SSH服务
6.3.4用Putty测试
6.3.5用SSHSecureShell测试
6.4NFS服务器
6.4.1NFS能做什么
6.4.2安装NFS软件包
6.4.3添加NFS共享目录
6.4.4启动NFS服务
6.4.5测试NFS服务器
6.5TFTP服务器
6.5.1TFTP能做什么
6.5.2安装配置TFTP软件
6.5.3配置TFTP服务器
6.5.4启动TFTP服务
6.5.5测试TFTP服务器
第二篇EasyARMi.MX283A开发平台
第7章EasyARMi.MX283A开发套件介绍
7.1开发套件简介
7.2硬件资源
7.3软件资源
7.4开发所需配件
7.5产品组装
7.6AP283Demo扩展板
7.6.1硬件特性
7.6.2外设接口布局
第8章EasyARMi.MX283A入门实操
8.1开机和登录
8.1.1启动方式设置
8.1.2供电连接
8.1.3串口硬件连接
8.1.4Windows环境串口登录
8.1.5Linux环境串口登录
8.2关机和重启
8.3查看系统信息
8.3.1查看系统内核版本
8.3.2查看内存使用情况
8.3.3查看磁盘使用情况
8.3.4查看CPU等的信息
8.4设置开机自动启动
8.5加载驱动模块
8.5.1在Shell终端上加载和使用驱动模块
8.5.2在脚本文件中加载和使用驱动模块
8.6网络设置
8.7通过SSH登录系统
8.8TF卡的使用
8.9U盘的使用
8.10USBDevice的使用
8.10.1把TF卡作为虚拟U盘的储存空间
8.10.2使用普通文件作为虚拟U盘的存储空间
8.11LED使用
8.11.1LED的操作接口
8.11.2触发条件设置
8.12蜂鸣器的使用
8.13LCD背光控制
8.14触摸屏的校准
8.15GPIO操作
8.16进阶操作
8.16.1挂载NFS目录
8.16.2使用NFS根文件系统
8.16.3使用TFTP启动内核
8.16.4内存文件系统
第9章系统固件的烧写
9.1NandFlash存储器分区
9.2烧写流程图
9.3格式化NandFlash
9.3.1通过USBBoot引导格式化NandFlash
9.3.2通过SDBoot方式格式化NandFlash
9.4TF卡烧写方案
9.4.1TF卡烧写用的固件
9.4.2制作TF启动卡
9.4.3固件烧写步骤
9.5USB烧写方案
9.6使用网络升级内核或文件系统
9.6.1网络升级用的固件
9.6.2升级步骤
9.6.3故障排除
第三篇Linux应用编程
第10章LinuxC编程环境
10.1GCC
10.1.1GCC简介
10.1.2GCC工具软件
10.1.3GCC基本使用方法
10.1.4GCC编译控制选项
10.1.5创建静态库和共享库
10.1.6armlinuxgcc
10.2GNUmake
10.2.1make和GNUmake
10.2.2给hello.c编写一个Makefile
10.2.3Makefile的规则
10.2.4make命令
10.3GDB
10.3.1GDB介绍
10.3.2GDB基本命令
10.3.3GDB调试范例
10.3.4GDB远程调试
10.3.5GDB图形前端DDD
10.4用于C/C++语言的EclipseIDE
10.4.1Eclipse简介
10.4.2安装用于C/C++语言的EclipseIDE
10.4.3启动Eclipse
10.4.4创建C工程
10.4.5本地编译和调试
10.4.6交叉编译和远程调试
10.4.7Eclipse中的GCC设置
10.4.8导入已有的工程文件
10.5Windows下开发Linux应用程序
10.5.1安装交叉编译器
10.5.2安装JDK
10.5.3安装用于C/C++Developers的EclipseIDE
10.5.4启动Eclipse
10.5.5创建C工程
10.5.6交叉编译工程
10.5.7建立远程SSH连接
10.5.8远程调试
第11章Linux文件I/O
第12章进程与进程间通信
第13章Linux多线程编程
第14章嵌入式GUI编程
第15章特殊硬件接口编程
第16章Linux串口编程
第17章C语言网络编程入门
第18章Shell编程初步
参考文献
a