linux4.10.8 内核移植(四)---字符设备驱动_led驱动程序
一、字符设备驱动程序介绍

app里面用 open、read、write等等函数出来操作底层硬件。驱动程序中也有对应的xxx_open等函数。怎么找到驱动程序中的函数依赖于驱动程序框架。
二、搭建驱动程序框架
2.1 初步框架
2.1.1 Makefile

2.1.2 jz2440_led.c
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/regmap.h>
#include <linux/fs.h> #define JZ2440_LEDS_MAJOR 111 /* 主设备号 */ static int jz2440_drv_open(struct inode *inode, struct file *file)
{
printk("jz2440_drv_open");
return ;
} static int jz2440_drv_close(struct inode *inode, struct file *file)
{
printk("jz2440_drv_close");
return ;
} static ssize_t jz2440__drv_read(struct file *file, char __user * buf, size_t count, loff_t * ppos)
{
printk("jz2440__drv_read");
return ;
} static ssize_t jz2440_drv_write(struct file *file, const char __user * buf, size_t count, loff_t * ppos)
{
printk("jz2440_drv_write");
return ;
} static struct file_operations jz2440_leds_ops = {
.owner = THIS_MODULE,
.read = jz2440__drv_read,
.open = jz2440_drv_open,
.write = jz2440_drv_write,
.release = jz2440_drv_close,
}; static int __init jz2440_drv_leds_init(void)
{
register_chrdev(JZ2440_LEDS_MAJOR,"jz2440_drv_leds",&jz2440_leds_ops);//注册驱动程序,即告诉内核
return ;
} static void __exit jz2440_drv_leds_exit(void)
{
unregister_chrdev(JZ2440_LEDS_MAJOR,"jz2440_drv_leds");
} //指向入口函数 jz2440_drv_leds_init
module_init(jz2440_drv_leds_init);
//出口函数 卸载驱动
module_exit(jz2440_drv_leds_exit); MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("jz2440 leds driver");
编译:

烧写运行:


进入开发板u-boot界面:
设置命令行启动参数
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.192:/home/ubuntu/work/nfs_root/fs_mini ip=192.168.0.191:192.168.0.192:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
启动内核:boot

nfs目录挂载成功。
查看proc目录:

设备号可用。
加载模块:

查看是否加载进去:

测试程序
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h> int main(int argc, char **argv)
{
int fd;
int val = ; fd = open("/dev/xxx", O_RDWR);
if(fd < )
{
printf("can't open !\n");
} write(fd, &val, );
return ;
}
编译烧写进板子,执行

创建设备节点;

执行 a.out

卸载驱动 rmmod jz2440_led
删除节点: rm -rf /dev/xxx
linux4.10.8 内核移植(四)---字符设备驱动_led驱动程序的更多相关文章
- linux4.10.8 内核移植(三)---裁剪内核
一.裁剪内核 1.1 第一次修改 现在的内核大小为2.8M左右,要裁剪到2.0M以下,毕竟给内核分区就只有2.0M. 这两个设备我们没有,裁剪掉. 进入make menuconfig中,搜索mouse ...
- linux4.10.8 内核移植(一)---环境搭建及适配单板。
一.环境搭建 源码包下载:git clone https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.10.8.tar.gz 或者直接去kernel. ...
- linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统
一.初步裁剪 在内核根目录下 执行: make menuconfig 1.1 system type裁剪 选择 SAMSUNG S3C24XX SoCs Support 进入其中,这里是配置我们的单板 ...
- linux字符设备驱动--基本知识介绍
一.设备驱动的分类 1.字符设备 字符设备是指那些能一个字节一个字节读取数据的设备,如LED灯.键盘.鼠标等.字符设备一般需要在驱动层实现open().close().read().write().i ...
- Linux内核分析(五)----字符设备驱动实现
原文:Linux内核分析(五)----字符设备驱动实现 Linux内核分析(五) 昨天我们对linux内核的子系统进行简单的认识,今天我们正式进入驱动的开发,我们今后的学习为了避免大家没有硬件的缺陷, ...
- (57)Linux驱动开发之三Linux字符设备驱动
1.一般情况下,对每一种设备驱动都会定义一个软件模块,这个工程模块包含.h和.c文件,前者定义该设备驱动的数据结构并声明外部函数,后者进行设备驱动的具体实现. 2.典型的无操作系统下的逻辑开发程序是: ...
- 深入理解Linux字符设备驱动
文章从上层应用访问字符设备驱动开始,一步步地深入分析Linux字符设备的软件层次.组成框架和交互.如何编写驱动.设备文件的创建和mdev原理,对Linux字符设备驱动有全面的讲解.本文整合之前发表的& ...
- 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联
转载自:http://www.kancloud.cn/yueqian_scut/emlinux/106829 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sy ...
- 【转】深入浅出:Linux设备驱动之字符设备驱动
深入浅出:Linux设备驱动之字符设备驱动 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据 ...
随机推荐
- 重温Delphi之:面向对象
任何一门语言,只要具备了"封装,继承,多态"这三项基本能力,不管其实现方式是直接或曲折.复杂或简洁,就可以称之为“面向对象”的语言. Delphi当年的迅速走红,是以其RAD快速开 ...
- resharper license server
2018-5-14更新 http://jetbrains-a.pw good 2018-4-17 更新 http://jetbrains.tools bad 144.202.4.96 good 201 ...
- 改变自己从学习linux开始
刚刚高中毕业,进如大学的时候,总以为摆脱了束缚可以无拘无束的玩耍了.当时真的就是和众多大学生一起,像撒欢的野马,每天逃课,上网,泡吧,不把学习当一会事,学校里教授讲的各种知识也没有听在心里,前两年玩的 ...
- HTML-XMLHttpRequest
var xhr = null; if(window.XMLHttpRequest){ xhr= new XMLHttpRequest(); }else{ xhr = new ActiveXObject ...
- mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
1.1 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 s ...
- Mercurial(Hg)基本操作
Mercurial(Hg)基本操作 来源 https://www.cnblogs.com/gb2013/archive/2012/05/18/Mercurial_Basic.html Mercuria ...
- 洛谷 P2345 奶牛集会 解题报告
P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...
- 面试 -- Http协议相关(转载)
http请求由三部分组成,分别是:请求行.消息报头.请求正文 HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接 ...
- 【洛谷P2384】最短乘积路径
题目大意:给定 N 个点,M 条边的有向图,边有边权,求从 1 号顶点到 N 号顶点的最短乘积路径.(经过的路径乘积最小)结果对9987取模. 乘积会爆 long long ,同时由于 dij 算法的 ...
- zTree重命名节点时,操作的那个dom(类似input框那个)怎么写
<script type="text/javascript"> //tree的编辑节点的方法 ztree.editName(nodeNew[0]); /// $(&qu ...