文章目录
  1. 1. 对外部设备的操作
  2. 2. 虚拟地址
    1. 2.1. 架构知识补充
      1. 2.1.1. 指令流水线
  3. 3. Linux内核子系统

四驱兄弟

Linux驱动包含3种:

  • 字符设备驱动
    字符设备是指能一个字节一个字节读取数据的设备,如:
    GPIO、按键、LCD、蜂鸣器、串口、声卡等字符设备。

    字符设备一般需要在驱动层实现open()、close()、ioctl()等函数。这些函数最终会被文件系统的相关函数调用。

    内核为字符设备对应的一个文件,如字符设备文件/dev/console。

  • 块设备驱动
    硬盘、存储设备、U盘

  • 网络设备驱动
    以太网、wifi

块设备和网络驱动通常有板级BSP包支持,通常较少开发。

**GPIO*通用输入输出口General Purpose Input Output Port*

对寄存器操作

MMU内存管理单元

有了内存管理单元,便有了虚拟地址、物理地址
MCU微控制器单片机没有MMU这个概念
MPU微处理器相比单片机有了内存管理单元

Linux把所有设备看成了文件(opoen,read,write,loctrl,close)

Linux字符设备驱动的编程思想:做一组设备对应的驱动函数

上层应用程序如何对某个外设进行操作

底层驱动的编写方式以及如何注册到系统(register_chrdev())

MISC杂设备(混杂设备)

模块(module)

对外部设备的操作

用程序对外部设备的操作有3部曲

  1. 通过原理图找到设备的PIN脚

单片机8051-GPIO

  1. 查看数据手册

KP_COL0

处理器控制KP_COL0输出一个低电平,就没有电压差LED2就不会亮

KP_COL0连接着 板对板连接器【4组中其中第2组】

板对板连接器

处理器的连接点
SCP4412处理器对应的连接点,局部图

对GPL2控制就可以对LED进行亮和灭的控制

CPU手册

SEC_Exynos4412_Users Manual_Ver.0.30.00_Preliminary

最终的物理地址=基地址+偏移地址

office偏移地址
基地址Base Address:ox1140_000

GPL2CON:配置寄存器,配置这个口不同功能方式

GPL2DAT:数据寄存器。把它作为输出口,写1则高电平

GPL2PUD:上拉/下拉寄存器

GPL2DRV:设置驱动力

GPL2CONPDN/GPL2PUDPDN:低功耗模式

GPL2CON,32位寄存器
GPL2CON寄存器
GPL2CON[0]:0-3位设置第0个GPL2CON寄存器

GPL2CON[1]:第1个GPL2CON寄存器

0则是输入口
1则是输出口
2*GNSS_GPIO[1]*则作为GPS功能来用
3作为矩阵键盘来使用**KP_COL[1]
设置为全1则  0XF   则作为中断来使用   EXT-INT29[1]

  1. 根据物理地址编程
1
2
3
4
5
6
7
8
9
10
11
12
13
/*对数据寄存器操作*/



unsigned int * pintx; /*编译后会生成32位,不同位数处理器会生成不同变量的字节数*/
printx=0x11000104; /*GPL2DAT物理地址,led对应的数据寄存器*/


*pintx=0;


/*第二种对寄存器赋值*/
*(unsigned int *) 0x11000104=0/*强制把地址转成指针,并赋值*/

虚拟地址

在ARM-LINUX编程把物理地址转化为虚拟地址,通过虚拟地址对设备进行操作。

架构知识补充

  • CPU(中央处理器)

    遵循冯 诺依曼结构存储程序,存储程序的思想,程序放在存储器当中,CPU不断的取指令去执行。

    说到底CPU是一套数字电路比如:门电路、与非门、触发器等等电路

    处理器解析执行一套指令系统。

    不断的顺序取指令执行

    哈佛结构:对冯 诺依曼结构存的创新。对取指令与取数据同时来操作。

  • 指令系统
    可以看成软硬件的界面;是计算机系统体系结构的思想。

    指令系统可以分为RISC精简指令集 CISC复杂指令集

    RISC:每一条指令,执行的时间、长度是一样的。ARM、MIPS、POWERPC都是采用精简指令集。优势:便于实现流水线,进一步提高性能。

指令流水线

可以使用一些需要计算机处理的多项操作在时间上重叠进行。

Linux内核子系统

Linux内核有许多子系统,包括进程管理、内存管理、文件管理、设备管理和网络管理。

进程管理
进程是程序运行的一个实例,是操作系统分配资源和调度的一个基本单位。分为3个状态

  1. 就绪状态

    在这种状态中,进程具有处理器外的其他,进程不运行

  2. 执行状态

  3. 阻塞状态

文章目录
  1. 1. 对外部设备的操作
  2. 2. 虚拟地址
    1. 2.1. 架构知识补充
      1. 2.1.1. 指令流水线
  3. 3. Linux内核子系统