《嵌入式Linux系统开发教程(第2版)》是一本非常值得推荐的书籍。本书通过详细的介绍,让读者从基础到高级逐步了解并掌握嵌入式Linux系统开发的知识。无论是对于初学者还是有一定经验的开发者来说,本书都是一份非常不错的学习资料。作者以深入浅出的方式呈现,帮助读者快速掌握嵌入式系统的基本概念。无论是对于想要了解嵌入式系统的原理和应用的读者,还是对于想要在实际项目中应用嵌入式Linux系统的开发者,本书都能提供全面的指导和实践经验。
嵌入式Linux系统开发教程
内容总结
1、linux系统组成
linux启动过程,上电后执行的第一部分代码(ARM为bootrom,X86为BIOS),针对多核CPU启动过程如下图:
执行init进程,其pid=1,通过pstree查看系统进程树。
Init->p1->p2->p3,p2为p1子进程,如果p2死,则p1知道,如果p1死,则init知道。可以在父进程中重启子进程。
2、linux层次结构
用户空间(非GPL),C库(LGPL),linux内核(GPL),通过ltrace查看用户空间代码调用的库函数,通过strace查看用户空间代码调用的系统调用。
Strace –T ./a.out显示调用时间
3、LD_PRELOAD
动态链接使用,将相同的符号名函数进行覆盖
LD_PRELOAD=./wrapper.so ./proc
如在代码中有malloc,本来是调用library中的malloc,此时用户wrapper.so中含有malloc,动态链接时调用的为wrapper.so中的malloc。
备注:动态链接中可以声明构造函数,该函数在main函数执行前执行,声明方式为
void helperinit(void) __attribute__((constructor));
编译动态链接库命令为 gcc -shared -fPIC pthread-helper.c -o pthread-helper.so -lpthread –ldl
编译多线程 gcc –pthread
4、文件系统
文件系统中三个文件夹很重要,它们均为基于内存的文件系统,硬盘中找不到。
/proc内部存放内核的状态,属性等,
/sys查看所有的设备信息
/dev设备文件节点
可以在/proc中实现cpu热插拔,echo 0 > /sys/devices/system/cpu/cpu1/online 关闭CPU1
内容介绍
本书系统论述了在Linux 环境下开发嵌入式系统的设计思想、设计方法及开发流程,通过实例与设计项目,帮助读者尽快掌握嵌入式系统的基本概念,提高嵌入式设计技能。本书共12 章,内容包括嵌入式基础知识、Linux 概述、ARM 体系架构、嵌入式编程、交叉工具链、Bootloader、定制内核、文件系统、驱动程序开发基础、嵌入式图形设计等。本书的最后给出了一个综合实例,帮助读者理解嵌入式Linux 的开发方法和技巧。
目录
- 第1章 嵌入式系统基础
- 第2章 Linux基础
- 第3章 ARM体系架构
- 第4章 嵌入式编程
- 第5章 软硬件开发环境
- 第6章 交叉编译工具
- 第7章 Bootloader详解及移植
- 第8章 定制内核移植
- 第9章 嵌入式Linux文件系统
- 第10章 嵌入式Linux驱动程序开发基础
- 第11章 嵌入式Linux图形设计
- 第12章 嵌入式视频监视系统开发实例
1. 环境搭建 作为Linux工程师,毋庸置疑一定需要Linux环境。对于Linux环境的获取,我们通常有两种方式: 将电脑整体安装为Linux系统; 在电脑里安装一个虚拟机,跑Linux电脑; Window+Linux双系统。 得到Linux环境后还不够,还要知道如何配置、如何远程连接Linux电脑、如何与Linux电脑互传文件、如何在主机上阅读Linux电脑中的代码,等等。 2. 基本操作 众所周知,Linux很少或几乎没有界面,所有的操作几乎都可以通过命令行来完成。对于运维人员来说,需要掌握相当大量的Linux命令。而对于应用、驱动方向的人员来说,只需掌握一些基本的常用的命令即可。对于这部分很多人建议看 「鸟哥的私房菜」 ,但我觉得这个更适合运维人员,我们无需掌握那么多命令。 3. 系统编程 在学系统编程之前,一定要先学习Makefile,这会为后续的学习提高很大效率。之后的系统编程,主要有几大块:IO编程、进程、线程、进程间通讯(包括管道、信号、信号量、共享内存等)。这几部分学完了,基本也就差不多了。 4. 网络编程 网络编程主要就是socket,poll,epoll,以及对TCP/IP的理解,同时要学会高并发式服务器的编写。 5. 数据库编程 数据库的内容其实并不属于Linux,但在项目中经常要用到。这部分主要要学会数据库的基本操作,以及如何写一套接口去操作数据库。 6. Shell编程 Shell是Linux下的脚本语言,功能虽然不如高级语言强大,但它可能做很多事,在某些场合甚至比高级语言要方便得多。当然除了Shell脚本,还有Python脚本。