1.给驱动模块的打印加tag #define pr_fmt(fmt) "my_module: " fmt //在所有include头文件之前加 pr_info("xxxx"); 2.根据函数指针打印函数名 Symbols/Function Pointers: %pF versatile_init+0 ...
分类:
系统相关 时间:
2020-05-08 14:40:37
阅读次数:
102
并发的途径: 1.多线程并发访问 2.抢占式并发访问 3.中断并发访问 4.多核(SMP),核间并发访问 常用防止并发访问手段 1.原子操作 原子操作可以保护数据每次操作不被其它操作打断,从而实现数据不被其它操作修改,达到保护数据的目的 使用结构体 typedef struct { int coun ...
分类:
其他好文 时间:
2020-04-06 15:35:08
阅读次数:
83
实现通过手柄让小车前进/后退/左转/右转 成品展示 视频演示(视屏审核中......) 材料: 彩色杜邦线 若干 arduino 开发板1个 L298n 电机驱动模块 1个 9V 电池一个 直流电机 4个 ps2 无限遥控手柄 一个载体,我这个是个快递纸盒子裁出来的纸板子/各个模块中间用牙签固定的. ...
分类:
其他好文 时间:
2020-03-29 14:18:28
阅读次数:
248
在嵌入式学习工作中经常初始化一个硬件就写一个初始化函数,基本都要到主函数中调用进行初始化,main函数都要改变。当利用 这个属性就可以构造一个 ,这样每次初始化一个硬件啥的就不用到main函数中去调用初始化函数。式在RTT初始化函数和Linux初始化驱动模块也是类似这样做的。 attribute的用 ...
分类:
其他好文 时间:
2020-03-01 23:23:59
阅读次数:
263
上面我们的驱动是放在了内核源码的目录下来实现的编译成驱动模块,很多时候我们都是拿到一个驱动源码,不需要把他放到内核源码里面,而是直接把他编译成驱动模块,下面我们来讲下实现方法,我们还是以蜂鸣器的驱动为例来讲解。1)因为开发板带的内核默认是把蜂鸣器直接编译到内核里面了,所以我们要重复前边的步骤“1”到 ...
分类:
其他好文 时间:
2020-02-25 13:10:42
阅读次数:
87
2020-02-09 关键字: 在嵌入式 Linux 开发中,驱动程序通常都是用 C语言 来编写的,并经编译后生成为目标文件,即 '.o' 文件。随后又可在编译系统时以两种形式打包成系统镜像文件: 1、uImage 即内核的二进制文件。这种形式是直接将内核驱动程序打包进系统文件中。这种形式的驱动程序 ...
分类:
系统相关 时间:
2020-02-09 23:57:43
阅读次数:
151
一、回顾 在 "linux poll机制使用(一)" 写了个实现poll机制的简单例子。在驱动模块中需要实现 的`.poll xxx_poll函数 POLLIN | POLLRDNORM`,否则返回0(可以看看上一章的例子);接下来分析一下 linux 内核中 poll 机制的实现。 二、poll机 ...
分类:
系统相关 时间:
2020-01-31 00:35:24
阅读次数:
90
1.编译与安装 正常的make, make install 就行。 需要注意的: (1)gcc 好像至少要 4.8 (这里需要可能会升级内核) (2)要 libmnl.so ,我是centos6.5 环境下 (3)由于涉及编译驱动模块,所以需要 内核开发包(需要注意 Makefile 中内核开发包路 ...
分类:
其他好文 时间:
2020-01-22 10:37:51
阅读次数:
80
一、任务详情: 阅读附件中的代码,回答: 1. ucos是如何分层的? 2.HAL都有哪些代码? 3. 分析任务是如何切换的。 二、ucos是如何分层的? 1.三层,分别是:上层访问抽象接口层、设备管理核心数据结构层、硬件设备驱动模块层。 2.上层访问抽象接口层: 一般的抽象层设计会直接在这一层提供 ...
分类:
其他好文 时间:
2019-12-29 14:39:34
阅读次数:
74
阅读附件中的代码,回答: ucos是如何分层的? HAL都有哪些代码? 分析任务是如何切换的。 一、ucos是如何分层的 共分三层,分别是:上层访问抽象接口层、设备管理核心数据结构层、硬件设备驱动模块层。 (1)上层访问抽象接口层: 一般的抽象层设计会直接在这一层提供5个访问接口API: Devic ...
分类:
其他好文 时间:
2019-12-29 10:40:04
阅读次数:
441