JZ2440笔记:热插拔驱动

(1)打印环境变量

vi lib/kobject_uevent.c +208

printk("feng: uevent_helper = %s\n",uevent_helper);
for(i=0;envp[i];i++)
{printk("envp[%d] = %s\n",i,envp[i]);
}

使用修改后的uImage启动,测试打印应用程序的环境变量:

# insmod dma.ko
feng: uevent_helper = /sbin/mdev
envp[0] = HOME=/
envp[1] = PATH=/sbin:/bin:/usr/sbin:/usr/bin
envp[2] = ACTION=add
envp[3] = DEVPATH=/module/dma
envp[4] = SUBSYSTEM=module
envp[5] = SEQNUM=743
feng: uevent_helper = /sbin/mdev
envp[0] = HOME=/
envp[1] = PATH=/sbin:/bin:/usr/sbin:/usr/bin
envp[2] = ACTION=add
envp[3] = DEVPATH=/class/s3c_dma/dma
envp[4] = SUBSYSTEM=s3c_dma
envp[5] = SEQNUM=744
envp[6] = MAJOR=252
envp[7] = MINOR=0
# ls  /sys/class/s3c_dma/dma
dev        subsystem  uevent
# cat  /sys/class/s3c_dma/dma/dev
252:0
# rmmod dma.ko
feng: uevent_helper = /sbin/mdev
envp[0] = HOME=/
envp[1] = PATH=/sbin:/bin:/usr/sbin:/usr/bin
envp[2] = ACTION=remove
envp[3] = DEVPATH=/class/s3c_dma/dma
envp[4] = SUBSYSTEM=s3c_dma
envp[5] = SEQNUM=745
envp[6] = MAJOR=252
envp[7] = MINOR=0
feng: uevent_helper = /sbin/mdev
envp[0] = HOME=/
envp[1] = PATH=/sbin:/bin:/usr/sbin:/usr/bin
envp[2] = ACTION=remove
envp[3] = DEVPATH=/class/s3c_dma
envp[4] = SUBSYSTEM=class
envp[5] = SEQNUM=746
feng: uevent_helper = /sbin/mdev
envp[0] = HOME=/
envp[1] = PATH=/sbin:/bin:/usr/sbin:/usr/bin
envp[2] = ACTION=remove
envp[3] = DEVPATH=/module/dma
envp[4] = SUBSYSTEM=module
envp[5] = SEQNUM=747
 

(2)修改mdev.conf(修改后要重启啊,不然不行)

# insmod myleds.ko
myleds_drv_init
# ls -l /dev/led*
crw-rw----    1 0        0        252,   1 Jun  4 22:31 /dev/led1
crw-rw----    1 0        0        252,   2 Jun  4 22:31 /dev/led2
crw-rw----    1 0        0        252,   3 Jun  4 22:31 /dev/led3
crw-rw----    1 0        0        252,   0 Jun  4 22:31 /dev/leds
# rmmod myleds.ko
myleds_drv_exit
1、# vi /etc/mdev.conf

leds 0:0 777
led1 0:0 777
led2 0:0 777
led3 0:0 777

# insmod myleds.ko
myleds_drv_init
# ls /dev/led* -l
crwxrwxrwx    1 0        0        252,   1 Jun  4 23:05 /dev/led1
crwxrwxrwx    1 0        0        252,   2 Jun  4 23:05 /dev/led2
crwxrwxrwx    1 0        0        252,   3 Jun  4 23:05 /dev/led3
crwxrwxrwx    1 0        0        252,   0 Jun  4 23:05 /dev/leds
 

2、# vi /etc/mdev.conf

leds?[123]? 0:0 777

# ls -l /dev/led*
ls: /dev/led*: No such file or directory
# insmod myleds.ko
myleds_drv_init
# ls -l /dev/led*
crwxrwxrwx    1 0        0        252,   1 Jun  4 23:41 /dev/led1
crwxrwxrwx    1 0        0        252,   2 Jun  4 23:41 /dev/led2
crwxrwxrwx    1 0        0        252,   3 Jun  4 23:41 /dev/led3
crwxrwxrwx    1 0        0        252,   0 Jun  4 23:41 /dev/leds
 

3、# vi /etc/mdev.conf

leds?[123]? 0:0 777 @ echo create /dev/$MDEV > /dev/console

# insmod myleds.ko
create /dev/led2
myleds_drv_init
# create /dev/led3
create /dev/leds
create /dev/led1

# vi /etc/mdev.conf

leds?[123]? 0:0 777 * if [ $ACTION = "add" ]; then echo create /dev/$MDEV > /dev/console; else remove create /dev/$MDEV > /dev/console; fi

# insmod myleds.ko
myleds_drv_init
# create /dev/led3
create /dev/led1
create /dev/leds
create /dev/led2

# rmmod myleds
myleds_drv_exit
remove时没有反应,没成功???

原来是驱动中出口函数exit写错了,并且没有卸载所有的led设备文件,呵呵。改好后

# insmod myleds.ko
create /dev/led1
create /dev/led2
myleds_drv_init
# create /dev/led3
create /dev/leds

# rmmod myleds.ko
remove /dev/leds
remove /dev/led3
myleds_drv_exit
remove /dev/led2
# remove /dev/led1
 

4、vi add_remove_led.sh 添加
#!/bin/sh
if [ $ACTION = "add" ]; 
then 
    echo create /dev/$MDEV > /dev/console; 
else 
    echo remove /dev/$MDEV > /dev/console; 
fi

#chmod +x /bin/add_remove_led.sh

# vi /etc/mdev.conf

leds?[123]? 0:0 777 * /bin/add_remove_led.sh

# insmod myleds.ko
myleds_drv_init
# create /dev/led1
create /dev/leds
create /dev/led3
create /dev/led2

# rmmod myleds.ko
remove /dev/leds
myleds_drv_exit
# remove /dev/led3
remove /dev/led2
remove /dev/led1

5、# vi /etc/mdev.conf

sda[1-9]+ 0:0 777 * if [ $ACTION = "add" ]; then mount /dev/$MDEV /mnt; else umount /mnt; fi

# ls /dev/sda* -l
brw-rw----    1 0        0          8,   0 Jun  5 10:06 /dev/sda
brwxrwxrwx    1 0        0          8,   1 Jun  5 10:06 /dev/sda1

# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / yaffs rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /tmp tmpfs rw 0 0
tmpfs /var tmpfs rw 0 0
tmpfs /dev tmpfs rw 0 0
devpts /dev/pts devpts rw 0 0
/dev/sda1 /mnt vfat rw,fmask=0000,dmask=0000,codepage=cp936,iocharset=cp936 0 0
# ls -l /mnt
drwxrwxrwx    2 0        0           32768 May 30 23:15 System Volume Information
drwxrwxrwx    7 0        0           32768 Oct 18  2023 һ▒▒▒Ƽ▒▒▒▒▒▒▒▒▒
# usb 1-1: USB disconnect, address 3

# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / yaffs rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /tmp tmpfs rw 0 0
tmpfs /var tmpfs rw 0 0
tmpfs /dev tmpfs rw 0 0
devpts /dev/pts devpts rw 0 0

6、vi add_remove_udisk.sh 添加#!/bin/sh
if [ $ACTION = "add" ]; 
then 
    mount /dev/$MDEV /mnt; 
else 
    umount /mnt; 
fi

#chmod +x /bin/add_remove_udisk.sh

# vi /etc/mdev.conf

sda[0-9]+ 0:0 777 * /bin/add_remove_udisk.sh

# ls -l /dev/sda*
ls: /dev/sda*: No such file or directory
# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / yaffs rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /tmp tmpfs rw 0 0
tmpfs /var tmpfs rw 0 0
tmpfs /dev tmpfs rw 0 0
devpts /dev/pts devpts rw 0 0

# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / yaffs rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /tmp tmpfs rw 0 0
tmpfs /var tmpfs rw 0 0
tmpfs /dev tmpfs rw 0 0
devpts /dev/pts devpts rw 0 0
/dev/sda1 /mnt vfat rw,fmask=0000,dmask=0000,codepage=cp936,iocharset=cp936 0 0
# ls -l /dev/sda*
brw-rw----    1 0        0          8,   0 Jun  5 13:34 /dev/sda
brwxrwxrwx    1 0        0          8,   1 Jun  5 13:34 /dev/sda1
# ls -l /mnt
drwxrwxrwx    2 0        0           32768 May 30 23:15 System Volume Information
drwxrwxrwx    7 0        0           32768 Oct 18  2023 һ▒▒▒Ƽ▒▒▒▒▒▒▒▒▒
# usb 1-1: USB disconnect, address 2

# ls -l /dev/sda*
ls: /dev/sda*: No such file or directory
# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / yaffs rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /tmp tmpfs rw 0 0
tmpfs /var tmpfs rw 0 0
tmpfs /dev tmpfs rw 0 0
devpts /dev/pts devpts rw 0 0
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unit8

Unit8 1. lect 选择,收集 collect collector collection collective select selected selection elect election eligible intellect intellectual intelligence neglect negligible negligence 2. long 长 long long for sth length lengthy lengthen be…

echarts legend. icon的展示

默认展示 icon展示circle圆形rect矩形roundRect圆角矩形triangle三角形diamond菱形pin水滴arrow箭头none不显示

Redis位图

简介 在我们平时开发过程中,会有一些bool型数据需要存取,比如用户一年的签到记录,签了是1,没签是0,要记录365天。如果使用普通的key/value,每个用户要记录365个,当用户上亿的时候,需…

资质延期后如何提升风景园林项目的质量

资质延期后,提升风景园林项目的质量是确保企业持续发展和市场竞争力的关键。以下是一些具体的建议,旨在帮助企业实现项目质量的提升: 一、科学规划和设计 注重项目前期调研:在项目开始之前,进行充分的市场调研和现场勘…

数据中心综合解决方案

安科瑞电气股份有限公司 祁洁 acrelqj 一、方案介绍 安科瑞电气紧跟数据中心发展形式,推出数据中心综合解决方案,集成了变配电监测、电源备自投、电气接点测温、智能照明控制、电能质量监测及治理、蓄电池在线监测、精密配电监控、智能母线监控以及消…

重要经济数据对行情的影响有多大?

金融市场上的消息非常多,可以来自不同国家、不同大型企业,也可以由不同机构统计公布,甚至是各国政府或中央银行的发表。在宏观经济层面上,所有政经消息都属于金融市场的风险事件,大多能引起市场波动,因此投…

MySQL里如果有字段是function怎么查询呢?

在MySQL中,字段名通常不会命名为function,因为FUNCTION是MySQL的保留关键字,用于定义存储函数。但是,如果你确实有一个字段名叫做function(尽管这通常不是一个好的实践),你仍然可以查询它。你只…

android 开机动画执行流程

android深入了解开机动画 开机动画的种类 1:View绘制 2:逐帧动画:比较主流的方式,一般动画的文件打包成 bootanimation.zip 存储到 /system/media/ 下。一般.zip文件 > 5M 就会有明显的卡顿,所以一般开机动画只有…

Python界面怎么下载

Python界面怎么下载 Python界面,通常指的是Python的集成开发环境(IDE)或图形用户界面(GUI)库所创建的窗口界面。对于初学者和开发者来说,选择一个合适的Python界面工具对于提高编程效率至关重要。然而&…

NoSuchModuleError: Can‘t load plugin: sqlalchemy.dialects:clickhouse解决方案

NoSuchModuleError: Cant load plugin: sqlalchemy.dialects:clickhouse解决方案:全面解析 问题概述 当您使用 SQLAlchemy 连接 ClickHouse 数据库时,遇到 NoSuchModuleError: Cant load plugin: sqlalchemy.dialects:clickhouse 错误时,这意味着无法加载 ClickHouse 方言…

正大国际期货:期货交易需要根除的几点习惯

1、交易过多品种。对于期货交易而言,最不靠谱的就是同时操作多个品种。我认为的较合适的品种上限在3-4个,甚至更少为好。我们经常看到的截图,动辄十个甚至数十个品种,而且都盈利,这种截图看看就罢,不必认真…

Python处理时间和日期库之pytime使用详解

概要 在Python编程中,时间和日期处理是一个常见的需求。虽然Python标准库提供了强大的时间和日期处理模块,但对于一些常见的任务,例如自然语言解析时间、简单的日期计算等,标准库的使用相对复杂。pytime库提供了一种简单而直观的方法来处理时间和日期,使得这些任务变得更…

240.搜索二维矩阵

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,…

2024-06-05 问AI: 介绍一下 SuperCLUE

文心一言 SuperCLUE是一个中文通用大模型综合性评测基准,旨在评估在当前通用大模型大力发展的情况下,中文大模型的效果情况。以下是关于SuperCLUE的详细介绍: 发布时间与背景: SuperCLUE于2023年5月9日正式发布。主要评估中文大…

宏基因组分箱(binning)|1.Metabat实战了解binning

Introduction 宏基因组学是直接从环境样本(如土壤、水、肠道内容物等)中回收遗传物质并进行研究的学科,无需对个体生物进行分离或培养。这一领域的研究为我们提供了对微生物群落多样性及其功能的深入理解。可以查看我之前写的宏基因组分析流…

汇总 |国内外医疗器械网络安全法规与标准

国内外关于医疗器械网络安全的法规和标准日益完善,旨在确保医疗器械在全生命周期内的网络安全,保障患者信息的安全和隐私,以及医疗器械的正常运行。不同国家和地区的法规和标准各有侧重,但都强调了医疗器械制造商、开发者、经营者…

Python - 深度学习系列38 重塑实体识别5-预测并行化改造

说明 在重塑实体识别4中梳理了数据流,然后我发现pipeline的串行效率太低了,所以做了并行化改造。里面还是有不少坑的,记录一下。 内容 1 pipeline 官方的pipeline看起来的确是比较好用的,主要是实现了比较好的数据预处理。因为…

Python正则表达式匹配中文:深入解析与实战应用

Python正则表达式匹配中文:深入解析与实战应用 在Python编程中,正则表达式是一种强大的工具,它可以用来处理和分析字符串数据。对于需要处理包含中文字符的文本数据的场景,掌握如何使用正则表达式匹配中文就显得尤为重要。本文将…

Solidwokrs钣金拆图之移动面命令使用技巧

Solidwokrs钣金拆图之移动面命令使用技巧 Chapter1 Solidwokrs钣金拆图之移动面命令使用技巧Chapter2 solidworks如何删除外部参考 Chapter1 Solidwokrs钣金拆图之移动面命令使用技巧 原文链接:https://www.sohu.com/a/441562400_728492 今天给大家介绍一个SolidW…

IO进程线程(六)进程

文章目录 一、进程状态(二)进程状态切换实例1. 实例1 二、进程的创建(一)原理(二)fork函数--创建进程1. 定义2. 不关注返回值3. 关注返回值 (三) 父子进程的执行顺序(四&…