news 2026/8/17 19:55:46

笔记 25 - 2 :linux 驱动模块移植,创建自定义驱动(编译为模块),调整 shell 里字体大小,

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
笔记 25 - 2 :linux 驱动模块移植,创建自定义驱动(编译为模块),调整 shell 里字体大小,

(298 - a)

++

++接着解释下这个 makefile 文件


++

(298 - b)解释 makefile 的二次编译

++

(298 - c)开始执行 make ,编译,以及运行

++

++USB 挂载,跟 NFS 一样,老师教了又一种方式

++

(299)以下是一些注释

(230)


(231)

// 头文件#include<linux/fs.h>#include<linux/cdev.h>#defineLED_MAJOR500// 和 mknod 的 500 一致#defineLED_MINOR0// 设备操作集:open/read/write/releasestaticstructfile_operationsled_fops={.owner=THIS_MODULE,.open=led_open,.write=led_write,};staticint__initled_drv_init(void){// 注册字符设备,主号500,名字"led",绑定fopsintret=register_chrdev(LED_MAJOR,"led",&led_fops);if(ret<0){pr_err("register_chrdev fail\n");returnret;}pr_info("led drv register ok, major=%d\n",LED_MAJOR);return0;}staticvoid__exitled_drv_exit(void){unregister_chrdev(LED_MAJOR,"led");}module_init(led_drv_init);module_exit(led_drv_exit);MODULE_LICENSE("GPL");

#include<linux/fs.h>#include<linux/cdev.h>#include<linux/device.h>#include<linux/module.h>staticintmajor;staticstructcdevled_cdev;staticstructclass*led_class;staticstructdevice*led_dev;staticstructfile_operationsled_fops={.owner=THIS_MODULE,.open=led_open,.write=led_write,};staticint__initled_drv_init(void){dev_tdevno;// 1. 动态申请主次设备号(不用自己硬写500)intret=alloc_chrdev_region(&devno,0,1,"led_auto");if(ret)returnret;major=MAJOR(devno);// 2. 初始化cdev,绑定操作函数集cdev_init(&led_cdev,&led_fops);led_cdev.owner=THIS_MODULE;cdev_add(&led_cdev,devno,1);// 3. 创建设备类 /sys/class/ledled_class=class_create(THIS_MODULE,"led");if(IS_ERR(led_class)){ret=PTR_ERR(led_class);gotoerr_cdev;}// 4. 自动生成 /dev/led 节点!【重点】led_dev=device_create(led_class,NULL,devno,NULL,"led");if(IS_ERR(led_dev)){ret=PTR_ERR(led_dev);gotoerr_class;}pr_info("auto create /dev/led, major=%d minor=%d\n",major,MINOR(devno));return0;err_class:class_destroy(led_class);err_cdev:cdev_del(&led_cdev);unregister_chrdev_region(devno,1);returnret;}staticvoid__exitled_drv_exit(void){dev_tdevno=MKDEV(major,0);device_destroy(led_class,devno);class_destroy(led_class);cdev_del(&led_cdev);unregister_chrdev_region(devno,1);}module_init(led_drv_init);module_exit(led_drv_exit);MODULE_LICENSE("GPL");


++ 四、用户态测试代码极简示例(配套上面驱动) :

// test_led.c#include<stdio.h>#include<fcntl.h>#include<unistd.h>intmain(void){intfd=open("/dev/led",O_WRONLY);if(fd<0){perror("open /dev/led");return-1;}write(fd,"1",1);// 传给驱动write,点亮LEDclose(fd);return0;}

五、实操命令汇总

# 加载驱动insmod led.ko# 查看字符设备cat/proc/devices# 看/dev/led信息ls-l/dev/led# 卸载rmmod led

(232)devtmpfs 在内核态;udev 是用户态守护进程




(233)

(234)

(235)

谢谢

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/17 19:54:00

Ryujinx模拟器终极配置指南:从五分钟上手到性能拉满

Ryujinx模拟器终极配置指南&#xff1a;从五分钟上手到性能拉满 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx 是一款用 C# 编写的实验性 Nintendo Switch 模拟器&#xff0c…

作者头像 李华
网站建设 2026/8/17 19:52:06

国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台

引言&#xff1a;大模型落地之困与平台化破局 近年来&#xff0c;以 GPT、文心一言、通义千问等为代表的国产大模型在技术能力上取得了长足进步&#xff0c;展现出强大的语言理解、内容生成与逻辑推理潜力。然而&#xff0c;将大模型从“技术演示”真正转化为驱动业务增长的“生…

作者头像 李华
网站建设 2026/8/17 19:47:09

单片机毕设选题推荐:基于 STM32 的雨水光照传感器数据监测与执行系统设计 基于 STM32 的步进电机模拟雨刮智能控制系统设计(013403)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华