当前位置: 首页 > news >正文

自助建网站市场展示型网站建设方案书

自助建网站市场,展示型网站建设方案书,外汇跟单网站开发,网站自助平台修改设备树文件 先关闭心跳灯功能#xff0c;也就是在图 10.4.1.2 中第 167 行添加 status 改为 disabled#xff0c;也就是禁止 work 这个节点#xff0c;那么禁止心跳灯功能。 我们后面需要禁止哪个功能#xff0c;只需要将其 status 属性改为 disabled 就可以了。 gpi…修改设备树文件 先关闭心跳灯功能也就是在图 10.4.1.2 中第 167 行添加 status 改为 disabled也就是禁止 work 这个节点那么禁止心跳灯功能。 我们后面需要禁止哪个功能只需要将其 status 属性改为 disabled 就可以了。 gpioled{compatible zxk, led;led-gpio gpio0 RK_PC0 GPIO_ACTIVE_HIGH;status okay;};编译内核并烧写boot.img // 1. 编译 ./bulid.sh kernel // 2. 烧写 驱动编写 /* 设置LED所使用的GPIO *//* 1. 获取设备节点gpioled */gpioled.nd of_find_node_by_path(/gpioled);if (gpioled.nd NULL){printk(gpioled node not found!\n);return -EINVAL;}/* 2. 读取status属性 */ret of_property_read_string(gpioled.nd, status, str);if (ret 0){printk(gpioled status not found!\n);return -EINVAL;}if (strcmp(str, okay) ! 0){printk(gpioled status not okay!\n);return -EINVAL;}/* 3. 获取compatible属性值并进行匹配 */ret of_property_read_string(gpioled.nd, compatible, str);if (ret 0){printk(compatible property not found!\n);return -EINVAL;}if (strcmp(str, zxk, led)! 0){printk(compatible property not match!\n);return -EINVAL;}/* 4. 获取gpio属性值并转换为gpio */ gpioled.led_gpio of_get_named_gpio(gpioled.nd, led-gpio, 0);if (gpioled.led_gpio 0){printk(led-gpio property not found!\n);return -EINVAL;}printk(led-gpio %d\n, gpioled.led_gpio);/* 5. 向gpio子系统申请使用GPIO */ret gpio_request(gpioled.led_gpio, led-gpio);if (ret 0){printk(gpio_request failed!\n);return -EINVAL;}/* 6. 设置GPIO为输出模式并输出为低电平默认led关闭 */ret gpio_direction_output(gpioled.led_gpio, 0);if (ret 0){printk(gpio_direction_output failed!\n);return -EINVAL;}#include linux/types.h #include linux/kernel.h #include linux/delay.h #include linux/ide.h #include linux/init.h #include linux/module.h #include linux/errno.h #include linux/gpio.h #include linux/cdev.h #include linux/device.h #include linux/of.h #include linux/of_address.h #include linux/of_gpio.h //#include asm/mach/map.h #include asm/uaccess.h #include asm/io.h/**************************************************************** 文件名 : gpioled.c* 功能 : 这是一个led设备驱动程序文件* 作者 : zxk* 创建日期: 2024年11月28日* 其他 ***************************************************************/#define GPIOLED_CNT 1 /* 设备号个数 */ #define GPIOLED_NAME gpioled /* 设备名 */ #define LED_ON 1 /* 开灯 */ #define LED_OFF 0 /* 关灯 *//* gpioled 设备结构体 */ struct gpioled_dev {dev_t devid; /* 设备号 */struct cdev cdev; /* cdev */struct class *class; /* 类 */struct device *device; /* 设备 */int major; /* 主设备号 */int minor; /* 次设备号 */struct device_node *nd; /* 设备节点 */int led_gpio; /* led对应的gpio */ };struct gpioled_dev gpioled;/**************************************************************** led_open - 函数名* description : 打开设备* param-inode : 传递给驱动的 inode* param-filp : 设备文件file 结构体有个叫做 private_data 的成员变量* 一般在 open 的时候将 private_data 指向设备结构体。** 返回值 : 0 成功 ***************************************************************/ static int led_open(struct inode *inode, struct file *filp) {filp-private_data gpioled; /* 设置私有数据 */return 0; }/**************************************************************** led_reads - 函数名* description : 从设备读取数据* param-filp : 要打开的文件设备* param-buf : 返回给用户空间的数据缓冲区* param-cnt : 读取的数据长度* param-off_t : 相对于文件首地址的偏移* return 读取的字节数 ***************************************************************/ static ssize_t led_read(struct file *filp, char __user *buf, size_t cnt, loff_t *off_t) { return 0; }/**************************************************************** led_write - 函数名* description : 向设备写入数据* param-filp : 设备文件要打开的文件设备* param-buf : 要写入设备的数据* param-cnt : 写入的数据长度* param-off_t : 相对于文件首地址的偏移* return 写入的文件数 ***************************************************************/ static ssize_t led_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *off_t) {int retvalue;unsigned char databuf[1];unsigned char ledstat;struct gpioled_dev *dev filp-private_data;retvalue copy_from_user(databuf, buf, cnt);if(retvalue 0) {printk(kernel write failed!\r\n);return -EFAULT;}ledstat databuf[0]; /* 获取状态值 */if(ledstat LED_ON) { gpio_set_value(dev-led_gpio, 1); /* 打开LED灯 */} else if(ledstat LED_OFF) {gpio_set_value(dev-led_gpio, 0); /* 关闭LED灯 */}return 0; }/**************************************************************** led_release - 函数名* description : 关闭释放设备* param-inode : 传递给驱动的 inode* param-filp : 设备文件要关闭的文件设备描述符** 返回值 : 0 成功 ***************************************************************/ static int led_release(struct inode *inode, struct file *filp) {return 0; }/* * 设备操作函数结构体 * 将驱动函数映射为系统调用 */static struct file_operations gpioled_fops {.owner THIS_MODULE,.open led_open,.read led_read,.write led_write,.release led_release, };/**************************************************************** led_init - 函数名* description : 驱动入口函数* param : 无* 返回值 : 0 成功 ***************************************************************/ static int __init led_init(void) {int ret;const char *str;/* 设置LED所使用的GPIO *//* 1. 获取设备节点gpioled */gpioled.nd of_find_node_by_path(/gpioled);if (gpioled.nd NULL){printk(gpioled node not found!\n);return -EINVAL;}/* 2. 读取status属性 */ret of_property_read_string(gpioled.nd, status, str);if (ret 0){printk(gpioled status not found!\n);return -EINVAL;}if (strcmp(str, okay) ! 0){printk(gpioled status not okay!\n);return -EINVAL;}/* 3. 获取compatible属性值并进行匹配 */ret of_property_read_string(gpioled.nd, compatible, str);if (ret 0){printk(compatible property not found!\n);return -EINVAL;}if (strcmp(str, zxk, led)! 0){printk(compatible property not match!\n);return -EINVAL;}/* 4. 获取gpio属性值并转换为gpio */ gpioled.led_gpio of_get_named_gpio(gpioled.nd, led-gpio, 0);if (gpioled.led_gpio 0){printk(led-gpio property not found!\n);return -EINVAL;}printk(led-gpio %d\n, gpioled.led_gpio);/* 5. 向gpio子系统申请使用GPIO */ret gpio_request(gpioled.led_gpio, led-gpio);if (ret 0){printk(gpio_request failed!\n);return -EINVAL;}/* 6. 设置GPIO为输出模式并输出为低电平默认led关闭 */ret gpio_direction_output(gpioled.led_gpio, 0);if (ret 0){printk(gpio_direction_output failed!\n);return -EINVAL;}/* 注册字符设备驱动 *//* 1.创建设备号 */if (gpioled.major){gpioled.devid MKDEV(gpioled.major, 0);ret register_chrdev_region(gpioled.devid, GPIOLED_CNT, GPIOLED_NAME);if (ret 0){printk(cannot register %s char driver [ret%d]\n,GPIOLED_NAME, GPIOLED_CNT);goto free_gpio;}}else{ret alloc_chrdev_region(gpioled.devid, 0, GPIOLED_CNT, GPIOLED_NAME);if (ret 0){printk(cannot register %s char driver [ret%d]\n,GPIOLED_NAME, GPIOLED_CNT);goto free_gpio;}gpioled.major MAJOR(gpioled.devid);/* 获取主设备号 */gpioled.minor MINOR(gpioled.devid);/* 获取次设备号 */}printk(gpioled major%d,minor%d\r\n,gpioled.major,gpioled.minor);/* 2.初始化cdev */gpioled.cdev.owner THIS_MODULE;cdev_init(gpioled.cdev, gpioled_fops);/* 3.添加一个cdev字符设备 */ret cdev_add(gpioled.cdev, gpioled.devid, GPIOLED_CNT);if (ret 0){goto del_unregister;}/* 4. 创建类 */gpioled.class class_create(THIS_MODULE, GPIOLED_NAME);if (IS_ERR(gpioled.class)){goto del_cdev;}/* 5.创建设备 */gpioled.device device_create(gpioled.class, NULL, gpioled.devid, NULL, GPIOLED_NAME);if (IS_ERR(gpioled.device)){goto destroy_class;}printk(led_init() \r\n);return 0;destroy_class:class_destroy(gpioled.class); del_cdev:cdev_del(gpioled.cdev); del_unregister:unregister_chrdev_region(gpioled.devid, GPIOLED_CNT); free_gpio:gpio_free(gpioled.led_gpio);return -EIO; }/**************************************************************** led_exit - 函数名* description : 驱动出口函数* param : 无* 返回值 : 0 成功 ***************************************************************/ static void __exit led_exit(void) {/* 注销字符设备驱动 */cdev_del(gpioled.cdev); /* 删除 cdev */unregister_chrdev_region(gpioled.devid, GPIOLED_CNT);/* 删除类 */device_destroy(gpioled.class, gpioled.devid);class_destroy(gpioled.class);/* 释放GPIO */gpio_free(gpioled.led_gpio);printk(led_exit() \r\n); }/* 将上面两个函数指定为驱动的入口和出口函数 */ module_init(led_init); module_exit(led_exit);MODULE_LICENSE(GPL); MODULE_AUTHOR(zxk); MODULE_INFO(intree, Y);ARCH arm64 KERNELDIR : /home/zxk/work/rk3568_linux_sdk/kernel CURRENT_PATH : /home/zxk/linux_driver/05_gpioled/obj-m : gpioled.obulid: kernel_moduleskernel_modules:$(MAKE) -C $(KERNELDIR) M$(CURRENT_PATH) modules clean:$(MAKE) -C $(KERNELDIR) M$(CURRENT_PATH) cleana编译测试 // 1.编译 make ARCHarm64 //ARCHarm64 必须指定否则编译会失败 /opt/atk-dlrk356x-toolchain/bin/aarch64-buildroot-linux-gnu-gcc ledApp.c -o ledApp // 2.上传 scp ./01_chrdevbase/chrdevbase.ko root192.168.137.65:/lib/modules/4.19.232/ scp ./01_chrdevbase/chrdevbaseAPP root192.168.137.65:/lib/modules/4.19.232/
http://www.hkea.cn/news/14296599/

相关文章:

  • 做地方网站能赚钱吗什么网站时候做伪静态
  • 做网站中app客户端东莞规划局
  • 大连网站建设运营邢台中高风险地区查询
  • 一学一做看视频网站成绩分析智能网站怎么做
  • 广州白云机场网站建设零基础培训网页设计
  • 做网站什么什么千城网站建设
  • 专业做网站的公司有没有服务器公司建立网站的必要性
  • 信息管理网站开发实验体会网站建设原理试卷
  • 网页搭建app优化大师手机版下载安装app
  • 学校网站建设策划书模板做办公家具在哪个网站推销好
  • id注册网站ui设计介绍
  • 建工网官方网站wordpress 相册主题
  • 网站收录500多页淘宝上成都网站建设
  • 滨州网站建设报价中国知名网站建设公司
  • 律师网站模版商丘吴昊网络科技有限公司
  • 怎么才能建立自己的网站啊义乌网图科技有限公司怎么样
  • 做服装行业网站怎么每天更新内容服务器网站崩溃
  • 哪个网站可以做电视背景墙cos wordpress
  • 微信公众号开发微网站开发海外做淘宝网站
  • 物业公司网站建设策划书新品发布会结束语
  • 建设银行博士后招聘网站做网站百度关键排名
  • 网站优化推广价格免费网站建设协议
  • 哪个网站专门做游戏脚本南京网站制作工具
  • 培睿网站开发与设计电子信息工程专业招聘信息网
  • 电子商务网站建设教学计划网站主机域名
  • 罗庄网站建设深圳网站建设信科网络
  • 广州专业网站建设公司小程序的下载
  • 2003系统建网站好看个人网页模板
  • o2o网站建设公司排名动态表单的设计与实现
  • 深圳门户网站建设案例江苏网站seo平台