learning notes
@2018-3-11
#001 Linux 学习步骤
> a. 先学会烧程序
> b. 再学会编译程序
> c. 最后研究内部,驱动开发,系统裁剪移植
#002 切莫追求资料的数量,要专情,要坚持
> a. 一味的追求资料的丰富度,而未尝试特定资料的深度,熟不知资料越多学习越乱,越难以入门,要像狼一样,瞄准猎物绝不妥协,反复针对性练习,就没有困难的的事情。
@2018-3-12
#003 make .config Kconfig menuconfig
> a. make 编译链接指令
> b. .config 内核配置脚本信息:编译内核所需的配置信息
> c. Kconfig 构成图形化配置编辑器的菜单内容
> d. menuconfig 配置编辑器:图形化的内核裁剪工具
通过 # make menuconfig 指令打开内核配置编辑器,内核配置编辑器通过迭代读取Kconfig文件而显示出配置菜单,配置完成后将生成 .config内核配置信息文件。
#004 Linux系统启动过程
> a. 上电伊始,硬件平台执行引导程序 bootloader
> b. 引导完毕,加载内核(解压缩内核、启动内核)
> c. 内核启动完毕后,挂载根文件系统(linux系统必须挂在根文件系统)
@2018-4-1
#005 Linux驱动
驱动设计要求,模块化、高内聚低耦合、分层化,应用程序只许使用驱动提供的接口,操作系统的使用增加了驱动开发的复杂性,但这样做的必要性是为上层提供统一的接口方便开发。
> a. Linux驱动分类
> · 字符驱动 串行访问设备
> · 块设备 任意顺序以块为单位访问
> · 网络设备 面向数据包收发设计
> b. Linux系统调用接口
open( ), close( ), write( ), read( )
> c. 学习知识点
> · 硬件知识(不限于协议、工作原理等)
> · C语言(不限于结构体、指针、函数指针、内存分配等)
> · Linux内核(不限于接口、架构等)
> · 工作机制(不限于多任务并发控制与同步等)
@2018-4-2
#006 Linux一切皆文件
> a. 文件分类
> · 普通文件 一般意义上的文件、磁盘文件
> · 设备文件 系统中一个具体的设备
> · 管道文件、FIFO文件 一种特殊文件,常用于进程间通信
> · 套接字(socket)文件 用于网络通信
> b. 文件操作
fd = open() / creat(), read(fd), write(fd), fsync(fd), close(fd)
@2018-4-3
#007 Linux进程
> a. 进程就是运行状态的程序
> b. 进程包含:进程运行环境,内存地址空间,进程ID,线程等
@2018-4-9
#008 Linux进程
> a. 每个进程创建时系统都会打开3个文件:① 标准输入,② 标准输出,③ 标准错误。这3个文件的描述符分别对应0 ,1, 2。
> b. 使用 fork() 函数创建进程
@2018-4-9
#009 Linux进程
> a. wait()函数是用来帮助父进程获取其子进程的退出状态,如果父进程未调用wait()函数,则其子进程的退出信息将一直保存在内存中
> · 僵尸进程:如果子进程先终止,其父进程没有为他调用wait()函数,那么该子进程就变为僵尸进程,在其父进程调用wait()函数之前将一直占有系统的内存资源
> · 孤儿进程:如果父进程先终止,尚未终止的子进程将会变为孤儿进程。孤儿进程将直接被init进程接管,由init进程负责收集他们的退出状态
@2018-4-13
#00A Linux信号
> a. sigaction()函数用来改变信号的处理方法
> b. kill()函数用来向指定的进程发送一个指定的信号
#00B Linux进程间通信
> a. 通信方式
> · 管道 是一个进程连接数据流到另一进程的通道,通常用来将一个进程的输出端连接到另一进程的输入端
管道分为:匿名管道与命名管道
匿名管道:用于具有父子关系的两个进程
匿名管道为半双工工作方式,且无法在文件系统中以任何方式看到
pipe()函数可用来创建一条匿名管道
命名管道:用于不相关(无父子关系)的两个进程
> · 信号
> · 信号量 信号量是用来解决进程间同步与互斥问题的一种进程间通信机制
同步:是指多个进程为了完成同一个任务相互协作运行
互斥:是指不同的进程为了争夺有限的系统资源而相互竞争运行
> · 共享内存 允许两个不相关的进程访问同一个逻辑内存的进程间通信方法,是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式
> · 消息队列
> · 套接字