当前位置:首页 » 操作系统 » linuxhotplug

linuxhotplug

发布时间: 2023-05-12 11:34:49

linux怎么样调节亮度

linux怎么样调节亮度的3种方法:

第一种方法:

1、打开一个终端,查看本机最大亮度值。
输入命令:
复制代码代码如下:
cat /sys/class/backlight/acpi_video0/max_brightness

2、输出显示一个数字。比如输入是15,如图。

第二种. 调节屏幕对比度参数gamma值

》 xgamma -gamma .75

如果不理前行想可以尝试将.75修改成0.5~1.0之间测试一下。我用1.0后感觉和Vista下亮度一致。

该命令无须管理员权限。

第三种. 调节本本屏幕背光亮度pci

》 sudo setpci -s 00:02.0 F4.B=xx

xx就是16进制表示的屏幕亮度值,范围0(最亮)~FF(最暗)。

00:02.0是你的显示器VGA设备代码。

用lspci命令查一下你的VGA设备代码:

》 lspci 00:00.0 Host bridge: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub (rev 03) 00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 03) 00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 03) 00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #4 (rev 03)

注意第二行00:02.0 VGA compatible controller。

sudo setpci -s 00:02.0 F4.B=FF


② 在Linux内核中,注册字符设备驱动程序的函数是

字符设备驱动程序框架 1、写出open、write函数 2、告诉内核 1)、定义一个struct file_operations结构并填充好 static struct file_operations first_drv_fops = { .owner = THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_mole变量 */ .open = first_drv_open, .write = first_drv_write, }; 2)、把struct file_operations结构体告诉内核 major = register_chrdev(0, "first_drv", &first_drv_fops); // 注册, 告诉内核相关参数:第一个,设备号,0自动分配主设备号,否则为主设备号0-255 第二个:设备名第二个:struct file_operations结构体 4)、register_chrdev由谁调用(入口函数调用) static int first_drv_init(void) 5)、入口函数须使用内核宏来修饰 mole_init(first_drv_init); mole_init会定义一个结构体,这个结构体里面有一个函数指针指向first_drv_init这个函数,当我们加载或安装一个驱动时,内核会自动找到这个结构体,然后调用里面的函数指针,这个函数指针指向first_drv_init这个函数,first_drv_init这个函数就是把struct file_operations结构体告诉内核 6)、有入口函数就有出口函数 mole_exit(first_drv_exit); 最后加上协议 MODULE_LICENSE("GPL"); 3、mdev根据系统信息自动创建设备节点: 每次写驱动都要手动创建设备文件过于麻烦,使用设备管理文件系统则方便很多。在2.6的内核以前一直使用的是devfs,但是它存在许多缺陷。它创建了大量的设备文件,其实这些设备更本不存在。而且设备与设备文件的映射具有不确定性,比如U盘即可能对应sda,又可能对应sdb。没有足够的主/辅设备号。2.6之后的内核引入了sysfs文件系统,它挂载在/sys上,配合udev使用,可以很好的完成devfs的功能,并弥补了那些缺点。(这里说一下,当今内核已经使用netlink了)。 udev是用户空间的一个应用程序,在嵌入式中用的是mdev,mdev在busybox中。mdev是udev的精简版。首先在busybox中添加支持mdev的选项: Linux System Utilities ---> [*] mdev [*] Support /etc/mdev.conf [*] Support subdirs/symlinks [*] Support regular expressions substitutions when renaming device [*] Support command execution at device addition/removal 然后修改/etc/init.d/rcS: echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev -s 执行mdev -s :以‘-s’为参数调用位于 /sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描 /sys/class 和 /sys/block 中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev 下创建设备节点文件。一般只在启动时才执行一次 “mdev -s”。热插拔事件:由于启动时运行了命 令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,那么当有热插拔事件产生时,内核就会调用位于 /sbin目录的mdev。这时mdev通过环境变量中的 ACTION 和 DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否“dev”的属性文件,如果有就利用这些信息为 这个设备在/dev 下创建设备节点文件重新打包文件系统,这样/sys目录,/dev目录就有东西了下面是create_class的原型: #define class_create(owner, name) / ({ / static struct lock_class_key __key; / __class_create(owner, name, &__key); / }) extern struct class * __must_check __class_create(struct mole *owner, const char *name, struct lock_class_key *key); class_destroy的原型如下: extern void class_destroy(struct class *cls); device_create的原型如下: extern struct device *device_create(struct class *cls, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...) __attribute__((format(printf, 5, 6))); device_destroy的原型如下: extern void device_destroy(struct class *cls, dev_t devt); 具体使用如下,可参考后面的实例: static struct class *firstdrv_class; static struct class_device *firstdrv_class_dev; firstdrv_class = class_create(THIS_MODULE, "firstdrv"); firstdrv_class_dev = class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); /* /dev/xyz */ class_device_unregister(firstdrv_class_dev); class_destroy(firstdrv_class); 下面再来看一下应用程序如何找到这个结构体的在应用程序中我们使用open打开一个设备:如:open(/dev/xxx, O_RDWR); xxx有一个属性,如字符设备为c,后面为读写权限,还有主设备名、次设备名,我们注册时 通过register_chrdev(0, "first_drv", &first_drv_fops)(有主设备号,设备名,struct file_operations结构体)将first_drv_fops结构体注册到内核数组chrdev中去的,结构体中有open,write函数,那么应用程序如何找到它的,事实上是根据打开的这个文件的属性中的设备类型及主设备号在内核数组chrdev里面找到我们注册的first_drv_fops,实例代码: #include #include #include #include #include #include #include #include #include #include static struct class *firstdrv_class; static struct class_device *firstdrv_class_dev; volatile unsigned long *gpfcon = NULL; volatile unsigned long *gpfdat = NULL; static int first_drv_open(struct inode *inode, struct file *file) { //printk("first_drv_open\n"); /* 配置GPF4,5,6为输出 */ *gpfcon &= ~((0x3<<(4*2)) | (0x3<<(5*2)) | (0x3<<(6*2))); *gpfcon |= ((0x1<<(4*2)) | (0x1<<(5*2)) | (0x1<<(6*2))); return 0; } 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"); _from_user(&val, buf, count); // _to_user(); if (val == 1) { // 点灯 *gpfdat &= ~((1<<4) | (1<<5) | (1<<6)); } else { // 灭灯 *gpfdat |= (1<<4) | (1<<5) | (1<<6); } return 0; } static struct file_operations first_drv_fops = { .owner = THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_mole变量 */ .open = first_drv_open, .write = first_drv_write, }; int major; static int first_drv_init(void) { major = register_chrdev(0, "first_drv", &first_drv_fops); // 注册, 告诉内核 firstdrv_class = class_create(THIS_MODULE, "firstdrv"); firstdrv_class_dev = class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); /* /dev/xyz */ gpfcon = (volatile unsigned long *)ioremap(0x56000050, 16); gpfdat = gpfcon + 1; return 0; } static void first_drv_exit(void) { unregister_chrdev(major, "first_drv"); // 卸载 class_device_unregister(firstdrv_class_dev); class_destroy(firstdrv_class); iounmap(gpfcon); } mole_init(first_drv_init); mole_exit(first_drv_exit); MODULE_LICENSE("GPL"); 编译用Makefile文件 KERN_DIR = /work/system/linux-2.6.22.6 all: make -C $(KERN_DIR) M=`pwd` moles clean: make -C $(KERN_DIR) M=`pwd` moles clean rm -rf moles.order obj-m += first_drv.o 测试程序: #include #include #include #include /* firstdrvtest on * firstdrvtest off */ int main(int argc, char **argv) { int fd; int val = 1; fd = open("/dev/xyz", O_RDWR); if (fd < 0) { printf("can't open!\n"); } if (argc != 2) { printf("Usage :\n"); printf("%s \n", argv[0]); return 0; } if (strcmp(argv[1], "on") == 0) { val = 1; } else { val = 0; } write(fd, &val, 4); return 0; }

③ linux 如何通过安装补丁,修改usb设备名称

具体的操作过程如下: 1.接入usb设备,然后运行命令:devlabel add -d /dev/sda1 -s /dev/usbdevice (--automount 可去掉!) /dev/sda1是usb设备名称,具体可以用fdisk -l查看,如果fdisk不能显示,可以用一个万能的方法: (#表示0,1,2,3....) 检测/proc/scsi/usb-storage-#是否存在清纯; 如果存在,检测/proc/scsi/usb-storage-#/#是否存在; 如果存在,检查文件/proc/scsi/usb-storage-#/#中最后一行Attach:是否是YES; 如果是YES,那么 0 = sda, 1=sdb, 2=sdc ; /dev/usbdevice是要使用的用户定义的设备名称,这个可以放在任意的目录中,名字大家自己定 automount指定:在 devlabel 重新启动时,如果 /etc/fstab 中有这个设备项目而且这个设备项目存在(找到了带有同一 UUID 的设备),那么就自动挂载这个项目汪斗。 2.建一个目录/mnt/usb 3.打开/etc/fstab,在里面添加一行:/dev/usbdevice /mnt/usb auto noauto,owner 0 0 这时就OK了,以后插入usb存储设备时就会自动挂载到/mnt/usb目录下了(前提是要有这个目录) 解决思想:当某个 USB 设备被插入,hotplug 就会运行 updfstab 程序。如果这个usb贮存设备存在,该程序会为它在 /etc/答陵咐fstab 中添加一项记录。所添加的这一行包含实际设备名称(如 /dev/sda1)和 kudzu 选项。kudzu 选项通知 Kudzu工具如果设备不存在就删除这一行。因为这一行是 devlabel 所需的,你必须删除 kudzu 选项才能使这一行被保留在文件内。你还需把设备名称改成 devlabel 设备名称(如 /dev/usbdevice),并创建挂载点(如 /mnt/usb)。所以修改后的就是上面的第3步. 最后,还有一种最最简单的方法,也是我现在使用的方法哈: 可以直接打开/etc/hotplug/usb.agent ,在里面找到"add)",在其中的 if [ -x /sbin/devlabel ]; then /sbin/devlabel restart fi 后面加上 [ -x /usr/sbin/udisk ]&& /usr/sbin/udisk 其中udisk是一个简单的挂载脚本: #! /bin/sh mount|grep /mnt/usb if [ "$?" = "0" ]; then umount /mnt/usb rmdir /mnt/usb else mkdir /mnt/usb mount /dev/sda1 /mnt/usb fi 这样做的目的是:当usb设备接入时,hotplug程序就会自动运行,在运行脚本中加入一个挂载脚本,不就一切OK了么~~ 不过上面的讨论都只能用于挂载,卸载还是必须用umount(选第3种办法的直接打udisk),这是同WIN一样的.

④ Linux里面杀掉进程命令是什么

方法一: Terminal终端输入: gnome-system-monitor,就可以打开system monitor

如图:

然后找到相应进程,右击选择kill process就可以了

方法二: 通过kill 进程id的方式可以实现,

首先需要知道进程id, 例如,想要杀死firefox的进程,通过 ps -ef|grep firefox,可以查到firefox的进程id:

然后通过 kill 3781 就可以关闭进程了.

补充: 1. kill -9 来强制终止退出, 例如: kill -9 3781

2.特殊用法:

kill -STOP [pid]
发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -KILL [pid]
发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1
终止你拥有的全部进程。

方法三: killall 通过程序的名字,来杀死进程

例如: killall firefox
注意: 该命令可以使用 -9 参数来强制杀死进程, killall -9 firefox

方法四: pkill 通过程序的名字, 直接杀死所有进程
例如: pkill firefox

方法五: 通过xkill 可以杀死图形程序应用, 例如firefox崩溃无响应,可以使用该命令.
例如: 用法xkill , 会出现一个白色的x, 然后用鼠标单击想要杀死的应用,如图

以下内容引用自: http://justcoding.iteye.com/blog/1931347

◆编者注:
KILLALL(Section: User (1)/Updated: 1999年9月7日)
———————————————–

NAME (名称)
killall – 以名字方式来杀死进程

SYNOPSIS (总览)
killall [-egiqvw] [-signal] name …
killall -l
killall -V

DESCRIPTION (描述)
killall 发送一条信号给所有运行任意指定命令的进程. 如果没有指定信号名, 则发送SIGTERM.。
信号可以以名字 (如 -HUP ) 或者数字 (如 -1 ) 的方式指定. 信号 0 (检查进程是否存在)只能以数字方式指定。
如果命令名包括斜杠 (/), 那么执行该特定文件的进程将被杀掉, 这与进程名无关。
如果对于所列命令无进程可杀, 那么 killall 会返回非零值. 如果对于每条命令至少杀死了一个进程, killall 返回 0。Killall 进程决不会杀死自己 (但是可以杀死其它 killall 进程)。

OPTIONS (选项)
-e
对 于很长的名字, 要求准确匹配. 如果一个命令名长于 15 个字符, 则可能不能用整个名字 (溢出了). 在这种情况下, killall 会杀死所有匹配名字前 15 个字符的所有进程. 有了 -e 选项,这样的记录将忽略. 如果同时指定了 -v 选项, killall 会针对每个忽略的记录打印一条消息。
-g
杀死属于该进程组的进程. kill 信号给每个组只发送一次, 即使同一进程组中包含多个进程。
-i
交互方式,在杀死进程之前征求确认信息。
-l
列出所有已知的信号名。
-q
如果没有进程杀死, 不会提出抱怨。
-v
报告信号是否成功发送。
-V
显示版本信息。
-w
等待所有杀的进程死去. killall 会每秒检查一次是否任何被杀的进程仍然存在, 仅当都死光后才返回. 注意: 如果信号被忽略或没有起作用, 或者进程停留在僵尸状态, killall 可能会永久等待。
FILES(相关文件)
/proc proc文件系统的存在位置。
KNOWN bugS (已知 BUGS)
以文件方式杀死只对那些在执行时一直打开的可执行文件起作用, 也即, 混杂的可执行文件不能够通过这种方式杀死。
要警告的是输入 killall name 可能不会在非 Linux 系统上产生预期的效果, 特别是特权用户执行时要小心。
在两次扫描的间隙, 如果进程消失了而被代之以一个有同样 PID 的新进程, killall -w 侦测不到。

来源:http://www.ubuntuhome.com/ubuntu-kill-command.html

下面来了解相关命令:

一、查看进程的命令 有ps、pstree、pgrep等:

1、ps
显示进程信息,参数可省略
-aux 以BSD风格显示进程 常用
-efH 以System V风格显示进程
-e , -A 显示所有进程
a 显示终端上所有用户的进程
x 显示无终端进程
u 显示详细信息
f 树状显示
w 完整显示信息
l 显示长列表

在终端中执行ps aux,
各列输出字段的含义:

USER 进程所有者
PID 进程ID
PPID 父进程
%CPU CPU占用率
%MEM 内存占用率
NI 进程优先级。数值越大,占用CPU时间越少
VSZ 进程虚拟大小
RSS 页面文件占用
TTY 终端ID
STAT 进程状态
+---D 不可中断 Uninterruptible sleep (usually IO)
+---R 正在运行,或在队列中的进程
+---S 处于休眠状态
+---T 停止或被追踪
+---Z 僵尸进程
+---W 进入内存交换(从内核2.6开始无效)
+---X 死掉的进程

+---< 高优先级
+---N 低优先级
+---L 有些页被锁进内存
+---s 包含子进程
+---+ 位于后台的进程组;
+---l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

PID:进程标识符,系统为每一个进程分配一个识别码,称为PID。

ps命令极为常用,其他命令还有:

2.pstree
树状显示进程信息
-a 显示完整命令及参数
-c 重复进程分别显示
-c 显示进程ID PID
-n 按 PID 排列进程

3.pgrep <进程名>
显示进程的PID
-l 显示进程名和进程PID
-o 进程起始ID
-n 进程终止ID

二、结束进程的命令 有kill、pkill、killall、xkill等:

kill [信号代码] <进程PID>

根据PID向进程发送信号,常用来结束进程,默认信号为 -9
信号代码,可取值如下:
-l [信号数字] 显示、翻译信号代码
-9 , -KILL 发送 kill 信号退出
-6 , -ABRT 发送 abort 信号退出
-15 , -TERM 发送 Termination 信号
-1 , -HUP 挂起
-2 , -INT 从键盘中断,相当于 Ctrl+c
-3 , -QUIT 从键盘退出,相当于 Ctrl+d
-4 , -ILL 非法指令
-11 , -SEGV 内存错误
-13 , -PIPE 破坏管道
-14 , -ALRM
-STOP 停止进程,但不结束
-CONT 继续运行已停止的进程
-9 -1 结束当前用户的所有进程

pkill <进程名>
结束进程族。如果结束单个进程,请用 kill

killall <进程名>
killall和pkill 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉。

xkill
在图形界面中点杀进程。
当xkill运行时鼠标指针变为骷髅图案,哪个图形程序崩溃一点就OK了。如果您想终止xkill ,就按右键取消。
比如当firefox 出现崩溃不能退出时,点鼠标就能杀死firefox 。
xkill 调用方法:
[root@localhost ~]# xkill

来源: http://www.cnblogs.com/1024-wusuopuBUPT/archive/2012/02/16/2354132.html

linux中pkill的简单用法

pkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉。

必要参数
-f 显示完整程序
-l 显示源代码
-n 显示新程序
-o 显示旧程序
-v 与条件不符合的程序
-x 与条件符合的程序

选择参数
-p<进程号> 列出父进程为用户指定进程的进程信息
-t<终端> 指定终端下的所有程序
-u<用户> 指定用户的程序

应用方法:

#pkill 正在运行的程序名

举例:

Java代码
[root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# pkill gaim

也就是说:

kill 对应的是 PID

pkill 对应的是COMMAND

例如在Ubuntu中强制结束一个已成僵尸的名称为:firefox,PID为:1603的进程,可以如下操作:

方法一:

(1)ctrl+alt+t,调出终端,输入 top,然后就可以看到现在系统的进程,是按占用资源从多到少排列的。

找到要关掉的进程,记下该进程第一列的数字编号(假设是xx),然后输入q,退回终端。

(2)输入:sudo kill xx(对应刚才的编号)。

方法二:

ctrl+alt+t,调出终端,输入:sudo pkill firefox

范例1: 杀死指定进程

Java代码
root@snail-hnlinux:~# ps -A //显示所有进程
PID TTY TIME CMD
1 ? 00:00:03 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
……忽略部分
28382 ? 00:00:00 gvfsd-http
28391 ? 00:07:07 software-center
30467 ? 00:00:31 designer-qt4
30487 ? 00:00:06 gnome-terminal
30488 ? 00:00:00 gnome-pty-helpe
30489 pts/0 00:00:00 bash
30670 ? 00:00:00 debconf-communi
30749 pts/0 00:00:17 gedit
31155 ? 00:00:00 dhclient
31325 ? 00:00:01 sshd
31327 ? 00:00:00 sshd
31400 pts/1 00:00:00 bash
31485 pts/2 00:00:00 bash
3 ? 00:00:00 aptd
31658 pts/1 00:00:00 ps
root@snail-hnlinux:~# pidof sshd //查看与sshd相关进程
31327 31325 2095
root@snail-hnlinux:~# pkill -9 sshd //杀死指定进程

范例2:杀死同义终端下的进程

Java代码
root@snail-hnlinux:~# pkill -t tty1 //杀死终端1下的所有进程

范例3: 杀死指定用户进程

Java代码
root@snail-hnlinux:~# pkill -u hnlinux

范例4:反向选择

Java代码
root@snail-hnlinux:~# pkill -vu hnlinux //杀死不属于hnlinux用户的所有进程

————————————————
版权声明:本文为CSDN博主“MrCoderr”的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/coderder/article/details/78899823

⑤ Linux系统设置U盘自动挂载

    笔者在工作中遇到自动挂载U盘,于是在树莓派和红帽系统上研究了一下U盘实现自动挂载。总的来说,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储设备。第二种方法有风险,第三种是设备管理服务udev添加规则实现自动mount,第四种方法则进一步封装mount添加日志功能。

    Raspberry Pi中USB设备的自动挂载由基于LXDE的GUI / DE处理,具体来说,由文件管理器PCManFM控制。若要禁用此行为,请打开“文件管理器”,然后从“编辑”菜单中选择“首选项”。选择“卷管理”选项卡,取消选中第二个选项“挂载可移动介质...” ,可以禁用第三个选项“显示可用选项...”设置,以防止弹出窗口提示可用程序。

    系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。使用检查UUID: sudo blkid,显示关于可用块设备的信息, 查找您的设备(如 / dev / sda1 )并复制其UUID。此方法只限于开机时已经插入U盘了,开机后再插入就不发自动挂载,需要执行sudo mount -a命令。

    在文件/ etc / fstab底部添加:UUID={YOUR-UID}    {/path/to/mount/point}    {file-system-type}    defaults,errors=remount-ro   0  1

  倒数第二是mp备份设置,当其值设置为1时,将允许mp备份程序备份;设置为0时,忽略备份操作。倒数第一是fsck磁盘检查设置,其值是一个顺序,当其值为0时,永远不检查;而 / 根目录分区永远都为1,其它分区从2开始,数字越小越先检查。

    修改后保存,关闭,重新启动设备以检查或键入: sudo mount -a  。mount -a 是自动挂载 /etc/fstab 里面的东西,会忽略所有已经完成的操作。但是笔者认为在这里面添加太过于危险,不要轻易操作这个文件,有可能造成系统无法开机。外部设备在插入时挂载,在未插入时忽略,不然无法进入系统,这需要添加 nofail 选项,但是操作这个文件不太方便,有其他刚好的方法。

    文件种有两种ACTION,add和remove。在U盘插入或者拔出时,自动激活mount和unmount,完成设备自动挂载。

KERNEL!="sd*", GOTO="media_by_label_auto_mount_end"

SUBSYSTEM!="block",GOTO="media_by_label_auto_mount_end"

IMPORT{program}="/sbin/blkid -o udev -p %N"

ENV{ID_FS_TYPE}=="", GOTO="media_by_label_auto_mount_end"

ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"

ENV{ID_FS_LABEL}=="", ENV{dir_name}="Untitled-%k"

ACTION=="add", ENV{mount_options}="relatime,sync"

ACTION=="add", ENV{ID_FS_TYPE}=="vfat", ENV{mount_options}="iocharset=utf8,umask=000"

ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", ENV{mount_options}="iocharset=utf8,umask=000"

ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options}  /dev/%k /media/%E{dir_name}"

ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}" 

LABEL="media_by_label_auto_mount_end"

       第三种方法中,mount或者unmount命令在实际运用中是无法记录日志的。在生产系统中就需要添加这个插入U盘和拔出U盘的动作,作为审核调查依据。将上面的mount -o或者unmount  -l替换成usbhotplug.sh  mount 和usbhotplug.sh   unmount。

#!/usr/bin/bash

time=`date "+%Y%m%d"`

LOG_FILE="/home/pi/mount-usb-$time.log"

date=`date`

echo $date >> $LOG_FILE

CMD=$1

case $CMD in

    'mount')

        /bin/mkdir -p $4

        echo "/bin/mkdir -p $4" >> $LOG_FILE

        sleep 2

        /bin/mount -o  $2 $3  $4

        echo "/bin/mount -o $2 $3  $4" >> $LOG_FILE

        sync

        echo "----------" >> $LOG_FILE

    ;;

    'umount')

        sync

        /bin/umount -f $2

        echo "/bin/umount $2" >> $LOG_FILE

        sleep 2

        /bin/rmdir $2

        echo "/bin/rmdir $2" >> $LOG_FILE

        echo "----------" >> $LOG_FILE

    ;;

esac

⑥ 如何在Linux下搭建pciE hotplug的测试环境

这个真是游戏开发不错大升引擎,现在相当流行。官网查到野搜开发环境要求和运行要求两个滚脊老。 开发环境:OS: Windows XP SP2+, 7 SP1+, 8; Mac OS X 10.6+. 运行环境:几乎是所有平台

⑦ echo /sbin/mdev> /proc/sys/kernel/hotplug什么意思

应该是loglevel的问题肢拍,通过下面命令查看你当前的液饥搭loglevel设置。 cat /proc/sys/kernel/printk 如果想什么都打印出来,就 echo 8 > /闹拿proc/sys/kernel/...

⑧ linux 下 USB的热插拔问题

目前一些主流桌面系统(如Gnome,KDE,Xfce)的较新版本都支持自动挂载(mount)U盘了. 一个流传很广的说法是 HAL(硬件抽象层) 起了自动挂载的作用, 其实这是误解. 对于2.6内核而言, udev 才是直接从内核接收设备连接或断开信息的主体.

udev 从内核得到信息后,根据一些简单规则(注意,是简单规则), 在 /dev 目录下创建相应的设备节点, 并进行某些相关操作. HAL 所做的事情是在 udev 的规则中加上一条(或几条), 让 udev 把收到的信息也传递给 HAL. 接派颤裂下来, HAL 用更为复杂的规则来匹配和描述当前连接着的硬件. 举一个简单的例子, udev 知道的是U盘已经连接了并且有一个分区; 而 HAL 能更进一步知道这个分区的卷标名及其它一些信息.

上面这些都还不能自动挂载U盘. Gnome 等桌面系统会启动一个守护进程(daemon), 通过 D-Bus 从 HAL 那里得到硬件信息, 如果发现有U盘连接了就由它们来挂载它(实际是调用 pmount).

问题是, 如果你不想用Gnome,KDE,Xfce这些桌面系统, 那么由它们提供的U盘自动挂载功能也洞郑就失效了,有解决办法么?

解决的办法之一, 便是让 udev 来干这件事情!

udev 的主要功能是实时地在 /dev 目录下创建和删除设备节点, 但它也能在创建节点的同时, 执行一个额外地程序. 具体的原理这里就不详说了, 有时间请仔细阅读 Writing udev rules 这篇文章. 写规则时特别注意 KERNEL, SUBSYSTEM 等这些关键字单数和复数(最后有没有'S')的区别. 复数(比如 KERNELS)表示你想用父设备的属性来匹配, 单数(比如 KERNEL)是要匹配设备本身的属性.

在 /etc/udev/rules.d 目录下创建文件 10_usbkey.rules, 其内容如下

KERNEL=="sda1", SUBSYSTEM=="block", RUN+="/root/usbmount.sh"

然后, 在 /root 目录中创建文件 usbmount.sh, 其内容为

#!/bin/bash

LOG=/var/log/usb-hotplug.log

lap=$(date --rfc-3339=ns)
echo "$lap: $DEVPATH requesting $ACTION" >> $LOG

if [ $ACTION == "add" ]
then
mount -t vfat -o umask=000,noatime,async,codepage=936,iocharset=gb2312 \
/dev/sda1 /media/usbkey
elif [ $ACTION == "remove" ]
then
umount -l /media/usbkey
fi

并把该文件属性设置为可执行, chmod a+x usbmount.sh
注意, 如果你的 linux 上 locale 是 zh_CN.utf-8, 需要把上面的 iocharset=gb2312 改成 iocharset=utf8

最后创建目尘闭录, mkdir /media/usbkey

这是一个非常简单但可用的例子. U盘插上后自动 mount 到 /media/usbkey , 拔出后自动 umount. 你可以查看 /var/log/usb-hotplug.log , 里面会有些简单的调用记录.

⑨ Linux系统环境下如何获得U盘拔插的信息

这样的做法效率有些低,现在通过一种特别类型的socket netlink实现获取U盘拔插咐念的信息。netlink专渣山门用于内核空间和用户空间的异步通信。
下面的例子能够监听内核衡梁困的hotplug事件,源代码如下:#include#include#include#include#include#include#include#include#include#include
#define UEVENT_BUFFER_SIZE 2048
static int init_hotplug_sock(void);
int main(int argc, char* argv[]){
int hotplug_sock = init_hotplug_sock();while(1){
char buf[UEVENT_BUFFER_SIZE*2] = {0};
recv(hotplug_sock, &buf, sizeof(buf), 0);
printf(%s\n, buf);}return 0;}
static int init_hotplug_sock(void){
struct sockaddr_nl snl;

⑩ 嵌入式linuxgadget开发中,usb设备插入PC时,在设备端怎么捕捉跟主机的连接和断开拜托各位了 3Q

你这种情况比较复杂!linux本身就已经有支持热插拔设备,并念没在插入和拔手高镇出后调用你指定的脚本,google里以linuxhotplug做关键字搜毕粗索即可。

希望采纳

热点内容
和存储字长 发布:2025-05-15 21:54:09 浏览:514
用什么写c语言 发布:2025-05-15 21:35:56 浏览:418
linux读取u盘 发布:2025-05-15 21:32:13 浏览:508
c语言dos 发布:2025-05-15 21:18:17 浏览:664
sci编译英文 发布:2025-05-15 21:16:57 浏览:383
大猫如何设置密码 发布:2025-05-15 21:15:32 浏览:765
什么叫苹果版的和安卓版的手机 发布:2025-05-15 21:05:18 浏览:254
编程找点 发布:2025-05-15 20:43:10 浏览:588
php上传临时文件夹 发布:2025-05-15 20:43:00 浏览:658
impala数据库 发布:2025-05-15 20:42:12 浏览:650