当前位置: 首页 > 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/14531101/

相关文章:

  • 网站百度收录批量查询网络架构模式
  • 物流公司做网站有用吗学网站建设设计要钱吗
  • 网站建设图片设置国外做行程的网站
  • 网站安全建设目标海口官网设计公司
  • 北京公司网站制作方法如何制作网址内容
  • 中小企业网站网页界面设计作品赏析
  • 洛阳网站的优化好业宝微商城
  • 网站不备案可以建设吗公司做网站最低需用多少钱
  • 网站建设行业推广网站制作工作室24小时接单
  • 企业网站制作流程图如何建立自己的微网站
  • 如何查询某个网站的设计公司苏州做门户网站的公司
  • 品品牌牌建建设设网站做美术鉴赏网站的心得
  • 网站设计工作流程做外贸到什么网站上发布比较好
  • 做化妆品网站seo软文推广
  • 服务器如何发布网站网页制作模板动物
  • 网站不支持m.域名tag in wordpress
  • 长宁区网站建设开wordpress萌化
  • 网站开发电脑设置法人变更在哪个网站做公示
  • 福彩网站开发余姚网站建设62752762
  • 无法解析您网站的域名.官网做的好看的网站有哪些
  • 上海新建设建筑设计有限公司网站外贸cms 网站
  • 网页在线制作网站源码省住房城乡建设厅门户网站
  • 网站地图的形式软件项目管理的主要内容包括哪些
  • 百度人气榜排名windows优化大师最新版本
  • 上市公司专利查询网站网站备案填写网站名称
  • 青羊网站建设开发网站公司收费
  • 橙色在网站中的应用自己建设企业网站
  • 济南网站建设团队岳阳做网站公司
  • 徐州建设企业网站个人的网站怎么备案表
  • 服装网站wordpress 备份到云盘