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类:字符设备.块设备.网络设备.使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据 ...
随机推荐
- windows下git显示文件被修改,实际没有改动的问题解决办法
不少开发者可能遇到过这个问题:从git上拉取服务端代码,然后只修改了一处地方,准备提交时,用diff软件查看,却发现整个文件都被修改了.这是git自动转换换行符导致的问题. 原因 不同操作系统使用的换 ...
- vim鼠标模式打开与关闭
开启鼠标模式 :set mouse=x, x取值如下, 例如:set mouse=a, 开启所有模式的mouse支持 n 普通模式 v 可视模式 i 插入模式 c 命令行模式 ...
- centos 7 修改系统屏幕分辨率
centos 7 修改系统屏幕分辨率,命令方式和图形方式的修改方法. 命令:xrandr 通过命令 xrandr 修改系统的分辨率,输入xrandr: bash [admin@localhost ~] ...
- Android x86 下运行纯ARM版APP
Android x86 默认不带houdini,运行纯ARM版会提示: 很抱歉,”xxxx”已停止运行 设置->应用兼容性->打开 终端模拟器 $ su# enable_nativebri ...
- httprequest存储的是字符内容 而文本内容是以字节形式上传的;所以普通的取值方式无法从httprequest取到值
httprequest存储的是字符内容 而文本内容是以字节形式上传的;所以普通的取值方式无法从httprequest取到值
- LightOJ - 1074 Extended Traffic(标记负环)
题意:有n个城市,每一个城市有一个拥挤度ai,从一个城市u到另一个城市v的时间为:(au-av)^3,存在负环.问从第一个城市到达第k个城市所话的时间,如果不能到达,或者时间小于3输出?否则输出所花的 ...
- Codeforces Round #404 (Div. 2)A,B,C
A. Anton and Polyhedrons 题目链接:http://codeforces.com/contest/785/problem/A 智障水题 实现代码: #include<bit ...
- IDEA在debug时修改变量值
IDEA在debug调试时修改变量值 例如以下代码: int y1 = 0; anchor.setDy1(y1); 在代码中,这个y1永远是0,但是y1本身是个变量 debug的时候获取到这个属性,并 ...
- MT【3】只有零向量旋转不变
解答: 评:利用了零向量方向不唯一的性质.
- 【BZOJ3512】DZY Loves Math IV(杜教筛)
[BZOJ3512]DZY Loves Math IV(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\] 其中\(n\le 10^5,m\l ...