liunx驱动----点亮LED
自动挂接根文件系统(直接从NFS启动)
- 修改uboot命令行
把 bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
- 设置服务器IP,目录
- 设置自己的IP
include <sys/types.h>
include <sys/stat.h>
include <fcntl.h>
include <stdio.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 ;
}
- 应用程序去打开一个open("/dev/xxx", O_RDWR); 使用 mknod /dev/xxx c 主设备号 次设备号 手动创建
- 使用自动创建 使用udev机制 就是busybox 中的mdev机制自动创建 (根据系统信息创设备节点)
定义一个类和一个设备
- 使用class_create创建一个firstdrv_class类
- 使用class_device_create创建一个设备 设备节点是 xyz
firstdrv_class_dev = class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); //mdev 自动创建一个 /dev/xyz */
int frist_drv_init(void)
{
major= register_chrdev(,"frist_drv",&first_drv_fops);//注册函数(注册驱动程序) (major 主设备号 )告诉内核
//主设备号 驱动名称 file_operations结构
/*生成系统信息*/
firstdrv_class = class_create(THIS_MODULE,"firstdrv");//创建一个 first_class 这样的一个类
firstdrv_class_dev = class_device_create(firstdrv_class, NULL, MKDEV(major, ), NULL, "xyz"); //mdev 自动创建一个 /dev/xyz */
return ;
}
- 使用class_device_unregister 函数来卸载 class_device_create创建的设备
class_device_unregister(firstdrv_class_dev);
- 使用class_destroy 释放 掉firstdrv_class这个类
class_destroy(firstdrv_class);
void frist_drv_exit(void)
{
unregister_chrdev(major,"frist_drv");//卸载函数 卸载驱动
class_device_unregister(firstdrv_class_dev);
class_destroy(firstdrv_class);
}
- 配置 GPFCON open
static int first_drv_open(struct inode *inode, struct file *file)
{
//printk("first_drv_open\n");
/*配置GPFCON 4 5 6为输出*/
*gpfcon &=~((0x3<<(*))|(0x3<<(*))|(0x3<<(*)));//清除GPFCON 4 5 6对应位
*gpfcon |= ((0x1<<(*))|(0x1<<(*))|(0x1<<(*)));//设置 GPFCON 4 5 6 为输出
return ;
}
- 设置 GPFDAT write
static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
{
int val;
//printk("first_drv_write\n");
copy_from_user(&val,buf,count);//将buf中的数据拷贝到 val中 val的值等于 *buf的前0-count的数据 copy_from_user的功能是从用户空间传递数据到内核空间
// 对应的 copy_to_user 从内核空间传递数据到 用户空间
if(val == )
{
*gpfdat |= ((<<)|(<<)|(<<));// 熄灭灯
}
else
{
*gpfdat &= ~((<<)|(<<)|(<<));//打开led
}
return ;
}
liunx驱动----点亮LED的更多相关文章
- linux平台总线驱动设备模型之点亮LED
这一节里,我们来使用平台驱动设备这一套架构来实现我们之前使用简单的字符设备驱动点亮LED,这里并无实际意义,只是告诉大家如果编写平台总线驱动设备. 问:如何编写平台总线驱动设备这一套架构的设备驱动? ...
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
- 驱动编程思想之初体验 --------------- 嵌入式linux驱动开发之点亮LED
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
- ARM学习篇一 点亮LED
要点亮LED,先决条件是什么,当然得有相应的硬件设施.板子的整个电路图比较大,我就直接取相关部分. 给发光二级管加上3.3v电压后,通过1k电阻,直接与S3C2440连接.至于为什么要加电阻,大家应该 ...
- arm-点亮led灯
点亮指路灯:学习四环节:led原理图分析,芯片手册导读,思维导图设计,为什么要使用led:通常led是作为程序调试的重要手段.led原理图:led实质为发光二极管,当其两端电压一定时,即处于导通状态. ...
- 学习笔记——单片机简介 & 点亮LED & 流水灯 & 电路基础【更新Ing】
视频地址:https://www.bilibili.com/video/av10765766 超详细!!!!!! 单片机内部三大资源 [资源:单片机可提供使用的东西] FLASH 可以重复擦写 断电后 ...
- 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED
实验原理: 通过STM32的三个GPIO口驱动三色LED的三个通道,设定GPIO为推挽输出模式,采 用灌电流方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过系统定时器实现 1s定时,每秒 ...
- 【iCore1S 双核心板_ARM】例程十:SYSTICK定时器实验——定时点亮LED
实验原理: 通过STM32的三个GPIO口驱动三色LED的三个通道,设定GPIO为推挽输出,采用 灌电流的方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过系统定时器实现 1s定时,每秒变 ...
- 第7章 使用寄存器点亮LED灯
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
随机推荐
- Educational Codeforces Round 5
616A - Comparing Two Long Integers 20171121 直接暴力莽就好了...没什么好说的 #include<stdlib.h> #include&l ...
- Android常用的工具类SharedPreferences封装类SPUtils
package com.zhy.utils; import java.lang.reflect.InvocationTargetException; import java.lang.reflect. ...
- 双向数据绑定原生js
let data = {} const input = document.getElementsByClassName('input')[0]; Object.defineProperty(data, ...
- myeclipse连接mysql失败出错,已解决问题
问题描述: 解决方案:
- yii2 gridview checkbox
给checkbox(在GridView里的)添加一个value 控制器:$dataProvidermStu->key = "student_no"; view:[ 'clas ...
- 报文分析5、UDP协议的头结构
UDP协议的头结构 源端口(2字节) 目的端口(2字节) 封报长度(2字节) 校验和(2字节) 数据 (1)源端口(Source Port):16位的源端口域包含初始化通信的端口号.源端口和IP地址的 ...
- transform:translate(-50%,-50%)实现水平垂直居中
.content { padding:10px; background:green; color:#fff; position:absolute; top:50%; ...
- 技术Leader相关文章和思考
参考文章: 你与优秀的技术Leader之间只差这一个“图谱” 如何成为优秀的技术主管?你要做到这三点
- MySQL 的安装
MySQL的全部安装步骤. 1::本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认 ...
- Python_tkinter(3)_grid布局
Grid(网格)布局管理器,是Tkinter里面最灵活的几何管理布局器.注意:不要试图在一个主窗口中混合使用pack和grid. 1.简单的布局 from tkinter import * root ...