Linux字符设备驱动架构
简单介绍了Linux字符设备驱动的工作原理,从应用程序,内核两个角度进行阐述,并有代码进行说明
编译的几个阶段和库的制作与使用
介绍了从源文件到可执行文件的几个编译步骤,静态库和动态库的制作和使用
写一个可读写的字符设备驱动
介绍了如何编写一个可读写的字符设备驱动,应用程序可以通过便准库函数read write 与驱动进行交互
Linux内核5:文件系统2_内核与文件系统衔接
1 引言Linux文件系统和内核是相对独立的,一个内核可以安装不同的文件系统,那么文件系统与内核的衔接就变得十分重要,Linux内核是通过什么方式与各种文件系统进行衔接的?他们的工作流程是怎样的,这就是这篇文章想要分析的问题。
2 文件系统的工作流程文件系统这个相对独立的部分有他自己的工作流程,他的起点是什么,目的是什么,这是这一章节希望理清楚的部分。
2.1 起点分析所谓的起点,就是内核启动文件系统的代码了,以linux kernel 2.6.22的内核代码为例,主要的部分如下面所示。
相关代码1:
在文件系统的代码中,这里为起点,这是linux kernel 2.6.22的main.c中的一段代码
12345if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) printk(KERN_WARNING "Warning: unable to open an initial console.\n");(void) sys_dup(0);(void) sy ...
Linux字符设备驱动流程
图解驱动过程,和参数传递
Linux内核2:中断代码分析
总体来说,中断相关的汇编代码有两个,asm.s,systemcall.s ,其中定义了中断发生前的相关参数入栈,调用的C函数入口地址入栈,中断发生后的恢复。而各种中断的C函数代码分布在不同的C文件中。如下表所示。
中断前处理,调用,中断后恢复
执行中断函数的C文件
硬中断的处理
asm.s
trap.c
软件及系统调用的处理
system_call.s
fork.c signal.c exit.c sys.c
比如,asm.s中包含了各种错误的中断相关汇编代码。其中具体实现又调用了c的代码,使用了各种do函数,这些do函数在traps.c文件中有定义
1234567891011121314151617181920/* * linux/kernel/asm.s * * (C) 1991 Linus Torvalds *//* * asm.s contains the low-level code for most hardware faults. * page_exception is handled by the mm, so that isn' ...
Linux内核3:进程管理
1进程运转方式总结:大概就是每10ms进定时器中断,在中断函数do_timer 中,进行进程的调度等操作。
详细:
系统时间(jiffies 系统滴答)
CPU内部RTC定时器,会在上电的时候调用mktime函数,算出距离1970年的秒数。在mktime.c中实现。long kernel_mktime(struct tm * tm),tm是由硬件RTC(CMOS)传入的,计算完了会保存在全局变量startup_time(sched.c)中,被系统滴答所用jiffies,
jiffies 系统滴答
10ms 10ms进定时器中断,中断函数timer_interrupt中jiffies自加,system_call.s中有代码
12345678910111213141516171819202122_timer_interrupt: push %ds # save ds,es and put kernel data space push %es # into them. %fs is used by _system_call push %fs pushl %edx # we save ...
Linux内核1:内核中断体系结构
1 学习中断的目的
硬件的中断响应 —-> 内核驱动中的中断
linux的系统调用由中断完成
自定义中断—>编程的时候用到了‘软件的软中断模式’
信号中断 (kill - signalnumber)—>系统命令是信号,进程间通信用到了信号,对了解信号的使用,创建等有很大帮助
系统的异常和错误—>系统的异常获取,了解系统异常的作用
2 中断的种类
硬中断:由电脑的8259A类似的硬件中断控制芯片发出的中断;ARM中断控制器发出的中断
软中断:有非常多的种类,一般叫做异常/错误。第一类:CPU自行保留的中断;第二类系统调用异常;
3 代码结构相关文件:
/kernal/asm.s; /kernal/traps.c
/kernal/system_call.s; /kernal/fork.c signal.c exit.c sys.c
4 工作流程4.1 中 ...
Linux内核4:文件系统1_概
1 Linux文件系统概述在linux中,可以安装各种不同的文件系统,也就是说文件系统本身和linux内核代码是相对独立的,比如ext2,ext3,ext4等,我想,在安装ubuntu等linux发行版的时候,大家都会发现,有这样的一个选择文件系统的步骤,哈哈哈。
linux读写硬盘的实际情况是,读的硬盘数据对应的高速缓冲区。而高速缓冲区再和硬盘进行对接,通过linux的一些函数进行同步
文件系统的结构,比如:引导快,超级快,i节点位图,数据区,i节点对应文件目录,每一个文件目录都有对应的一个i节点,i节点是文件目录和物理磁盘连接的桥梁,这是一个结构体,里面记录了一些相关信息,比如:文件夹的数组id,长度大小,修改时间,链接数,占用的磁盘的逻辑块,物理块的数组号。
管道:用作进程间通信的工具pipe,一个进程写入管道,另一个读出
文件系统到底如何与底层的设备进行沟通呢?比如vfs,虚拟文件系统,比如字符驱动和块驱动,如何通过文件打开iocontrol,进行操作。
如何移植
2 Linux文件系统的作用
管理磁盘数据:磁盘中的文件通过文件系统形成了目录结构,方便管理
操作硬件:Linux ...
分页机制和页面高速缓存
分页机制和页面高速缓存