Linux
Linux_system
<一切皆文件>
<数据类型><数据结构><IO编程><进程线程><网络编程>
应用 open read ioctl write close
<VFS机制>
内
< 进程调度><内存管理><文件系统><设备管理><网络接口>
核
<内核驱动>
(字符设备,块设备,网络设备)
硬件
同步是规则,阻塞是等待
进程调度:
内存管理:
文件系统:
普通文件 [ - ] ,目录文件 [ d ] ,字符设备 [ c ] ,块设备 [ b ] ,套接字 [ s ] ,管道 [ p ] ,链接 [ l ]
inode索引节点编号:544365
文件类型 :文件类型是’-‘,表示这是一个普通文件
文件权限 :rw-r–r– 表示文件可读、可写、可执行,文件所归属的用户组可读可执行,其他用户可读可执行
硬链接数 :表示a.txt这个文件没有其他的硬链接,因为连接数是1,就是他本身
文件属主 :表示这个文件所属的用户,这里的意思是a.txt文件被root用户拥有,是第一个root
文件属组 :表示这个文件所属的用户组,这里表示a.txt文件属于root用户组,是第二个root
文件大小, 文件大小是3个字节
文件修改时间 :这里的时间是该文件最后被更新(包括文件创建、内容更新、文件名更新等)的时间可用如下命令查 看文件的修改、访问、创建时间
设备管理:
网络接口:
内核驱动:
字符设备驱动 (IO,UART,RTC,ADC,PWM......)
总线设备驱动 (虚拟:platform 物理:IIC,SPI,USB,PCI......)
输入设备驱动 (绝对,按键,相对)
pinctrl子系统
:无缓冲的直接的设备访问,以字节为单位顺序读写,称为裸设备(raw devices)
块设备的驱动 (硬盘,SD......)
:有缓冲区的随机设备访问,以扇区为单位随机读写,多为存储设备
网络设备驱动 (网卡,CAN......)
:为网卡设计的驱动模型(eth0,eth1)
<笔记>
1. Linux由汇编和C语言构成
2. 根文件系统,是挂载在根目录下的文件系统,是linux内核启动以后第一个加载的文件系统,是其他文件系统的挂载点(mount)
3. PATH(环境变量):在系统中的任何地方都可以运行都可以用 !
(PATH =(把绝对路径告知,任何情况都使用)sudo vim etc/enviroment)
4. 三大子系统:Bootloader(uboot)—— kernel(linux—3.0.8.tar.bz2)—— 根文件系统(独立制作)
<print—setenv/saveenv—nand—tftp—bootm—go>
5. 内核中有文件系统接口层,VFS(机制)要求必须有一个根目录
接口函数上层提供VFS内核接口,sysopen / sysclose / sysread / syswrite ......
fopen ——> open ——> sysopen ——> dry_open
6. file a.out (工作平台)
7. 主机与目标机连接
UART —— USB —— TCP/IP —— DebugJtag
8. 交叉编译器
交叉编译工具链 —> arm—none—linux—guneabi—
交叉编译工具集 —> readelf — nm — size — strip — strings — objcopy — objdump — addr2line
9. mmu是一个物理硬件,这样速度快!
10. (虚拟地址) CPU——>MMU——>Dev (物理地址)
11. linux中的同步与异步 :
同步 : 信号量/自旋锁/原子操作
解决同步问题 : 对共享资源(共享代码是临界区)的互斥访问,需要对临界区加锁(信号量/自旋锁)。
信号量(阻塞) :
信号量(睡眠) : A(down资源)——>B(睡眠)——>A(up资源)——>B(down资源)——>(up信号量)
信号量只能在进程中使用,不能在中断中使用,可以长期加锁,不能同时使用自旋锁!
互斥信号量,只有一个资源。
(信号量可以有多个,自旋锁只能有一个)
自旋锁(非阻) :
CPU反复轮巡查看 !
进程上下文与中断上下文同步 —— 自旋锁
内核进程与内核进程 : 信号量
内核进程与中断其他 : 自旋锁
短期加锁,CPU开销大,不能同时信号量(会睡眠滴),持有时不能二次持有(否则死锁)
12. 设备树:实现驱动代码与设备信息的分离
在ARM Linux内,一个.dts(device tree source)文件对应一个ARM的machine;
( arch/arm/boot/dts/ )
13. Linux中文件是一堆二进制码,对内输入,对外输出
14.