![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动
和蔼的二师兄222
专注嵌入式
展开
-
Linux下各头文件的作用
2.6.30.4的头文件的位置和2.6.25.8的不一样,除去内核源码下的include目录外,在arch/arm/mach-s3c2410/和arch/arm/plat-s3c24xx/目录下都有include目录的。#include /* printk() *///#include /* kmalloc() *///#include转载 2014-09-04 11:16:19 · 492 阅读 · 0 评论 -
互斥机制
竞争发生的情况1. 多核cpu之间访问资源2. 低优先级的进程和高优先级的进程之间3. 中断处理程序和进程之间解决竞争的机制:互斥机制:1.关中断: 非抢占单CPU 别人的中断不会干扰 自己的中断会干扰 2.原子操作: 抢占多CPU 3.自旋锁:关抢占没关中断 一般配合关中断使用 忙等锁 里面放的代码尽量少 保证进程间互斥(多CPU)4.原创 2017-03-21 14:45:21 · 708 阅读 · 0 评论 -
类class
自动创建设备文件,可以让驱动自动创建设备文件,不再使用 mknod /dev/myled c 250 0一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,再调用 device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空原创 2017-03-21 15:04:38 · 248 阅读 · 0 评论 -
内核中的时间流
时间的一个重要概念jiffies: 内核的一个全局变量,jiffies每隔一个固定时间就会增加1,这个固定间隔由定时器中断来实现每秒钟产生多少个定时器中断,由在中定义的宏HZ确定HZ是一个宏在编译内核时,这个__KERNEL__是编译选项#ifdef __KERNEL__#define HZ CONFIG_HZ#define USER_HZ HZ#原创 2017-03-21 15:01:55 · 351 阅读 · 0 评论 -
输入子系统
Linux系统提供了input子系统,按键、触摸屏、键盘、鼠标等输入都可以利用input接口函数来实现设备驱动input设备用input_dev结构体描述,(struct input_dev代表一个输入设备)使用input子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述)具体的输入设备驱原创 2017-03-21 14:58:39 · 252 阅读 · 0 评论 -
中断机制
裸板中的中断处理1.硬件处理(1)cpu强制进入中断模式(2)cpsr ->spsr(3)lr = pc -4(4)cpu强制跳转到中断向量表 2.软件处理初始化中断(1)设置中断管脚(2)设置触发方式(电平、边沿 EINT0/1/2)(3)设置中断模式 (IRQ/FIQ)INTMOD(4)使能中断,开屏蔽位 INTMSK,EINTMASK,CPSR原创 2017-03-21 14:49:45 · 323 阅读 · 0 评论 -
字符设备驱动
如何一步一步执行驱动:在进行驱动加载的过程中使用 insmod mydev.ko时,会执行驱动的加载函数,在驱动的加载函数中会进行设备的注册1. MKDEV (hello_major, hello_minor)去生成设备号2. 向内核去注册设备节点result = register_chrdev_region (dev, number_of_devices, "hello");原创 2017-03-21 14:31:44 · 273 阅读 · 0 评论 -
IO模型
IO模型 阻塞 非阻塞 多路复用 信号驱动阻塞机制1. 使用等待队列去实现阻塞机制等待队列1. 头文件: 或则 #include 2. 等待队列头的定义wait_queue_head_t q;struct __wait_queue_head { spinlock_t lock; struct lis原创 2017-03-21 14:40:46 · 212 阅读 · 0 评论 -
proc文件系统
proc文件系统被用于内核向用户导出信息。通过它可以使用一种新的方法在 Linux内核空间和用户空间之间进行通信。struct proc_dir_entry { unsigned int low_ino; unsigned short namelen; const char *name; mode_t mode;原创 2017-03-21 14:30:08 · 350 阅读 · 0 评论 -
内核中的内存与分配
1. 内核空间和用户空间 1G ~ 3G 用户空间使用的地址范围(3G) 3G ~ 4G 内核空间使用的地址范围(1G)2. 内存的申请(1)用户空间的内存申请: malloc free(2)内核空间的内存申请:a.__get_free_pages() 与void free_page(unsigned long addr)ext原创 2017-03-20 11:10:03 · 370 阅读 · 0 评论 -
platform_bus
静态编译驱动: 1. 首先把led.c 放到内核中放到 driver/char目录中2. 添加一个编译的选项 修改driver/char/Kconfig 文件 config S5PV210_LED bool "s5pv210 led device support" tristate "s5pv210 led device support" help原创 2017-03-20 11:05:13 · 718 阅读 · 0 评论 -
I2C驱动
Linux2.6.30/driver/i2c/1.algos: 协议算法相关的东西2.busses: 各种平台的i2c总线驱动(i2c控制器驱动/i2c适配器驱动)3.chips: 各种i2c设备驱动(e2prom/某种传感器/触摸屏)4.i2c-core.c i2c-dev.c: i2c子系统的通用文件(i2c核心层,提供一些通用函数接口)应用层app原创 2016-05-07 01:16:18 · 6133 阅读 · 0 评论 -
可重入函数和不可重入函数
可重入函数主要用于多任务环境中,简单来说就是可以被中断的函数,即在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,返回控制时不会出现什么错误;也意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是 purecode(纯代码)可重入,可以允许有该函数的多个副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。而不可重入的函数由于使用了一些系统资源,转载 2014-11-06 12:47:28 · 356 阅读 · 0 评论 -
bootloader
bootloader最终目的:启动内核BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的 软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备在嵌入式系统中,通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。 一个嵌入式系统从软件角度来看分为三个层次:1. 引原创 2017-03-21 16:20:37 · 8674 阅读 · 0 评论