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.  

Stay hungry, stay foolish 待续。。。
原文地址:https://www.cnblogs.com/panda-w/p/11003702.html