
嵌入式
fenglang1233307
这个作者很懒,什么都没留下…
展开
-
简单的linux驱动模块编写
刚开始接触Linux的驱动,暂时只是从Linux驱动模块的角度出发,编写最简单的linux驱动模块,先贴代码~~~ 一个驱动模块有一下几部分组成:1、头文件 2、模块的装载函数和卸载函数的实现 3、模块的装载函数和卸载函数的声明 4、模块的GPL声明。 这里说的头文件只是包含最基本的两个头文件:linux/init.h和linux/module.h,装载函数声明...原创 2018-03-24 14:50:59 · 2158 阅读 · 0 评论 -
Linux Makefile 生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明
https://blog.youkuaiyun.com/qq1452008/article/details/50855810转载 2018-05-29 19:15:29 · 2284 阅读 · 0 评论 -
ubuntu环境变量的三种设置方法
https://blog.youkuaiyun.com/vertor11/article/details/70799971转载 2018-05-27 14:32:42 · 643 阅读 · 0 评论 -
基于exynos4412的按键驱动实验的异步IO的实现
驱动代码:#include <linux/module.h>#include <linux/init.h>#include <linux/of.h>#include <linux/device.h>#include <linux/fs.h>#include <linux/interrupt.h>#include &...原创 2018-04-06 13:41:49 · 553 阅读 · 0 评论 -
基于exynos4412的多路复用实验的实现
这篇我们讲讲多路复用,这里我们不用select而用polll来实现多路复用,还是以上一篇的按键驱动实验为基础添加多路复用功能,先看测试代码。#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h&...原创 2018-04-06 12:36:32 · 392 阅读 · 0 评论 -
基于exynos4412的按键驱动实验的阻塞和非阻塞模式的实现
在上一篇按键驱动编程实验中,虽然我们实现了K2和K3的按键驱动,但是测试程序在运行的时候会一直调用read函数,导致cpu占有率很高,我们看一下测试程序运行的时候cpu的占有率,如下图。测试程序运行时占了不少cpu资源,所以我们这里用阻塞和非阻塞模式来实现。具体就是说当没有数据的时候,进程就阻塞不占用cpu资源,当有数据的时候再讲进程唤醒。也就是触发中断的时候唤醒进程。我们看一下具体的驱动代码实现...原创 2018-04-05 23:38:24 · 404 阅读 · 0 评论 -
通过TCP/IP实现PC(客户端)远程控制开发板(服务器)上LED灯的实验
这篇我们来做个小实验,实现开发板上运行服务端,可以直接控制led灯,客户端通过socket连接到服务端,通过发送指令来远程控制服务端的led灯。我们用平台总线的思想来编写驱动程序,这里分为LED平台驱动程序和LED平台设备程序。先看看LED平台设备程序plat_led_pdev.c的代码:#include <linux/init.h>#include <linux/module...原创 2018-04-09 22:55:20 · 7213 阅读 · 1 评论 -
内核函数kzalloc和kmalloc的区别
初学linux驱动,遇到一个空指针的问题,弄了一晚上没解决,原来是结构体初始化的时候用了kmalloc来分配空间,导致结构体成员未被正确初始化,尤其是结构体成员中存在指针的时候,就会发生“野指针”的情况。看内核代码kzalloc函数的实现:所以kzalloc是kmalloc和memset的结合,也就是将申请成功后的空间成员变量初始化为0。...原创 2018-03-31 12:33:03 · 1366 阅读 · 3 评论 -
基于exynos4412的按键驱动编程
本文基于华清4412开发板,讲解如何从零开始编写按键驱动程序和测试程序。首先介绍一下该4412开发板的按键硬件原理图。这里我们实现K3和K2的按键驱动。从底板的原理图中可以看到K3按下之后SIM_DET引脚被拉成低电平(0),K3抬起时引脚又被拉高,变成高电平(1),K2同理。再看核心板的原理图。可以看到K3按键对应芯片4412的外部中断10,也就是XEINT10,K2同理。接下来我们看4412的...原创 2018-03-30 20:55:31 · 3342 阅读 · 3 评论 -
基于exynos4412的led驱动编程
本文基于华清4412开发板,讲解如何从零开始编写led驱动程序和测试程序。首先介绍一下该4412开发板的led硬件原理图。从原理图上我们可以看出,让led点亮的条件是往对应端口送高电平,熄灭的条件是送低电平。从上面这幅图中可以看到对应引脚的寄存器配置,这里我们选择对LED2进行闪烁实验。我们需要把GPX2CON【7】配置寄存器设置为输出模式,也就是设置为0x1。我们还需要通过设置数据寄存器来控制L...原创 2018-03-25 10:56:40 · 2523 阅读 · 0 评论 -
linux驱动模块的参数传递和模块导出
接着上一篇,这一篇我们讲讲linux驱动模块的参数传递和模块导出。先上代码 相比上一篇,这里我们多了两个参数value和name,我们可以在insmod内核的时候使用module_param这个宏来实现内核模块参数的传递,这点就类似于应用层我们写main函数一样,main函数也有两个参数argc和argv,只不过内核换了种方式传递参数而已,首先看module_param宏定义,module_par...原创 2018-03-24 15:21:17 · 1481 阅读 · 0 评论 -
结构体中的深拷贝和浅拷贝
/* * 结构体中的深拷贝和浅拷贝,重要!!!!!! * 浅拷贝就是编译器机械的拷贝变量1中的内容到变量2中,如果是指针变量只会拷贝指针变量中存放的地址并不会拷贝指针所指向的内存空间的内容 **/#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct st...原创 2018-11-08 23:08:17 · 1137 阅读 · 0 评论