$1$驱动开发

目录

1.驱动大纲:

2.单片机开发属于嵌入式开发吗?

3.RAM裸机代码和驱动有什么区别?

4.Linux系统的组成

5.宏内核、微内核 

6.驱动移植


1.驱动大纲:

       (1)内核模块

       (2)字符设备驱动

       (3)中断、内核定时器

2.单片机开发属于嵌入式开发吗?

广义: 单片机开发属于嵌入式的---(嵌入式微处理器开发)---单片机搭载实时的系统

            单片机一般不带mmu(地址映射,物理地址和虚拟地址做转换)

狭义:单片机开发不属于嵌入式--- (Linux嵌入式开发)

3.RAM裸机代码和驱动有什么区别?

共同点:

     都能操作硬件

不同点:

     arm裸机:

         1.直接操作物理地址

         2.单独编译单独执行

         3.arm裸机同时只能执行一份代码

         4.arm裸机代码只需要一个main函数就可以了,在main函数中编写裸机程序

      驱动:

         1.需要对物理地址进行转换----转换成虚拟地址

         2.依赖内核编译,依赖内核执行

         3.驱动可以同时执行多份代码(操作系统具有进程管理)

         4.驱动是依赖内核的框架和操作硬件的过程,每个模块都有独立的运行任务

4.Linux系统的组成

app     :        app       glibc    【0-3G】

---------------------------------系统调用(软中断)--------

kernel  :                           【3-4G】

5种功能

   进程管理:进程的创建,销毁,调度等功能

   文件管理:通过文件系统ext2/ext3/ext4 yaff jiffs等来组织管理文件

   网络管理:通过网络协议栈对数据进程封装和拆解过程。

   内存管理:通过内存管理器对用户空间和内核空间内存的申请和释放 

   设备管理: 设备驱动的管理

      字符设备驱动:

1.按照字节为单位进行访问,顺序访问

2.会创建设备文件,open read  write close来访问

      块设备驱动  :

        1.按照块(512字节)(扇区)来访问,可以顺序访问,可以无序访问

 2.会创建设备文件,open read  write close来访问

       网卡设备驱动:

  1. 按照网络数据包来收发的。

---------------------------------------------------------

hardware:led 鼠标  键盘  lcd  触摸屏  摄像头  u盘  emmc  猫 路由器 dm9000

$1$驱动开发_第1张图片

5.宏内核、微内核 

宏内核:将进程、网络、文件、设备、内存等功能集成到一个内核中

特点:代码运行效率高

缺点:如果有一部分出错,整个内核就崩溃了

eg:Android Ubuntu 

微内核:只将进程、内存机制集成到内核中,文件、设备、驱动等在操作系统之外

特点:运行效率低一些,通过API接口让整个系统运行起来

缺点:效率低

优点:稳定性强

eg:鸿蒙 window QNX

6.驱动移植

1)需要一个驱动对应的.c代码   

       一般用什么东西,什么东西的厂商会提供一套驱动代码

 2) 将.c文件放到对应的驱动文件夹下(drivers/char)

$1$驱动开发_第2张图片  

 3)修改char文件夹下的Makefile-->连接自己的.o文件

 $1$驱动开发_第3张图片

 4)修改char下的Kconfig-->

$1$驱动开发_第4张图片

 $1$驱动开发_第5张图片

5)去顶层目录下执行make menuconfig-->配置自己的驱动

--> Device Drivers --> Character devices --> <>this is LCD 修改为this is LCD  

<*> 编译到内核里      <>不编译    编译为独立模块

$1$驱动开发_第6张图片

 $1$驱动开发_第7张图片

 $1$驱动开发_第8张图片

6)顶层目录下make modules(编译独立的驱动模块),如果配置编译到内核中执行 make uImage

$1$驱动开发_第9张图片

7) ubuntu下(sudo insmod lcd.ko)开发板下(cp自己的驱动.ko nfs路径)insmod lcd.ko

cp lcd.ko  /opt/6818/rootfs/rootfs (nfs路径)

你可能感兴趣的:(单片机,嵌入式硬件)