linux内核结构介绍及驱动引入

目录

 

一、Linux内核结构框图

二、图解linux系统架构

三、驱动认知

3.1 为什么要学习写驱动

3.2 文件名与设备号

3.3 open函数打通上层到底层硬件的详细过程

四、shell

        shell脚本

参考:linux内核结构介绍

一、Linux内核结构框图

对内核结构框图有个总体的把握,有助于理解为什么驱动要这样写,为什么写的应用程序所用的C库接口能够产生这么多的事情。

 

 函数库就像一个“黑匣子”,提供了一系列API支配内核运作,但你不知道内核发生了什么。

     内核是一个很厉害的超级逻辑,把硬件底层的东西抽象化,对用户来说只需要调API就好了,
根本不需要管寄存器,协议,总线…(单片机会去直接操作),这些全部由操作系统做好。
动不动写个操作系统是不现实的。

能把字符设备,块设备的设备驱动吃透,已经很厉害了。

二、图解linux系统架构

    最内层是硬件,最外层是用户应用,比如浏览器等等。硬件是物质基础,而应用提供服务。

        为了方便调用内核,Linux将内核的功能接口制作成系统调用(system call)。用户不需要了解内核的复杂结构,就可以使用内核。系统调用是操作系统的最小功能单位。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。

        系统调用提供的功能非常庞大,所以使用起来很麻烦。一个简单的给变量分配内存空间的操作,就需要动用多个系统调用。Linux定义一些库函数(library routine)来将系统调用组合成某些常用的功能。上面的分配内存的操作,可以定义成一个库函数,比如常用的malloc。

三、驱动认知

3.1 为什么要学习写驱动

 原来树莓派开发使用厂家提供的wiringPi库,开发简单。

        但未来做开发时,不一定都是用树莓派,没有wiringPi库可以用。但只要能运行Linux,linux的标准C库一定有。

        学会根据标准C库编写驱动,只要能拿到linux内核源码,拿到芯片手册,电路图…就能做开发。

3.2 文件名与设备号

        linux一切皆为文件,其设备管理同样是和文件系统紧密结合。在目录/dev下都能看到鼠标,键盘,屏幕,串口等设备文件,硬件要有相对应的驱动,那么open怎样区分这些硬件呢?

依靠文件名与设备号

依靠文件名与设备号。在/devls -l可以看到 

 设备号又分为:主设备号用于区别不同种类的设备;次设备号区别同种类型的多个设备。驱动插入到链表的位置(顺序)由设备号检索

内核中存在一个驱动链表,管理所有设备的驱动。 驱动开发无非以下两件事:

1.编写完驱动程序,加载到内核
2.用户空间open后,调用驱动程序(驱动程序就是操作寄存器来驱动IO口,单片机51,32就是这种操作)

3.3 open函数打通上层到底层硬件的详细过程
 

用户空间调用open(比如open(“/dev/pin4”,O_RDWR))产生一个软中断(中断号是0x80),进入内核空间调用sys_call,这个sys_call在内核里面是汇编的,用Source Insight搜索不到。

sys_calll真正调用的是sys_open(属于VFS层虚拟文件系统,因为磁盘的分区和引脚分区不一样,为了实现上层统一化),根据你的设备名比如pin4去到内核的驱动链表,根据其主设备号与次设备号找到相关驱动函数。

调用驱动函数里面的open,这个open就是对寄存器的操作,从而设置IO口引脚电平。这件事对于单片机来说特变容易,就两句话搞定:

sbit pin4 = P1^4;
pin4=1;

(对应下图的粉色笔迹)

四、shell

shell(壳)是一个特殊的应用,也经常被称为命令行 。可以理解为是一个命令解释器

例如:当我们输入“ls -l”的时候,它将此字符串解释为

1.在默认路径找到该文件(/bin/ls),
2.执行该文件,并附带参数"-l"。

      一个shell对应一个终端 (terminal)。曾经来说,终端是一个硬件设备,用来输入并显示输出。如今,由于图形化界面的普及,终端往往就像下图一样,是一个图形化的窗口。

     你可以通过这个窗口输入或者输出文本,这个文本直接传递给shell进行分析解释,然后执行,本质就是提供和内核交互的程序。

shell脚本

        在没有图形界面之前,shell充当了用户的界面,当用户要运行某些应用时,通过shell输入命令,来运行程序。shell是可编程的,它可以执行符合shell语法的文本,这样的文本叫做shell脚本(script)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追着太阳跑1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值