linux设备号之操作
作者:李强,华清远见嵌入式学院讲师。
在Linux设备驱动中,设备号设一个很重要的概念和变量。不论是主设备号,还是次设备号,在设备驱动中都占据了很重要的地位。那么他在Kernel中是如何操作的?这个数据结构都是通过那些函数可以很容易的在我们写Linux设备驱动模块时被我们所使用呢?
在include/linux/type.h文件中我们能看到一个关于dev_t的定义如下:
...
typedef __u32 __kernel_dev_t;
typedef __kernel_fd_set fd_set;
typedef __kernel_dev_t dev_t;
...
从这个定义中我们能看到dev_t是一个无符号的32位的整型。
首先我们需要说明的是,在linux中主次设备号是放置在一个无符号的32位的整型中,那么这32位整型对于主次设备号如何分配呢?
从源代码中我们可以看到,主设备号占据12个位,次设备好占据20位。这在一定的时期内,主次设备号是完全可以满足系统需要的。
同时在include/linux/kdev_t.h文件中我们能发现很多函数或者宏定义的操作都是针对dev_t的。
具体可以看到我们经常用到的MAJOR(dev)、MINOR(dev)、MKDEV(ma,mi)。
下面我们就具体分析下这三个我们经常用到的宏定义:
#define MINORBITS 20
#define MINORMASK ((1U << MINORBITS) - 1)
#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
从这个宏定义中我们可以看到其把无符号的32位的整型做位操作运算:右移20位。
在C语言中如果是右移,那么左边补0,这样在这32位的整型中通过这个操作就只保留了原先第19位到31位的有效值,而这也正是我们所需要的。
下面我们看下MINOR这个宏定义:
#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
要明白这个宏定义的具体是多少,我们需要首先明白宏定义MINORMASK是什么?
我们从前面的宏定义中,我们看到:
#define MINORMASK ((1U << MINORBITS) - 1)
MINORMASK 是1U也就是1左移位20个字节,二进制的话就是10000000000000000000,也就是1后面带20个0。
然后在减1呢,就成了二进制11111111111111111111,也就是20个1,十六进制的话是0xFFFFF。
好现在我们知道MINORMASK是20个1,也就是十六进制0xFFFFF,那么我们在与
相关文档:
基本实用工具:
ls 显示文件名(list)
cat 显示文本文件内容
rm [-i] 删除文件(remove),-i打开选项
less/more 分屏显示文件
hostname 显示系统名
文件操作:
cp SOURCEFILE DESTINATIONFILE 复制文件copy
mv OLDNAME NEWNAME 更改文件名(move)
lpr [-p] FILEN ......
http://www.ibm.com/developerworks/cn/linux/l-cn-memleak/ 介绍了基本的测试类型和原理
http://blog.csdn.net/rufeng18/archive/2008/11/17/3322099.aspx
http://www.ibm.com/developerworks/cn/linux/l-pow-debug/
http://xueyueming.blog.163.com/blog/static/60411785200981045547110/
http://zhangyafeikimi.java ......
[root@GISDB ~]$ su - oracle
[oracle@GISDB ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on Tue Oct 13 11:03:03 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
To ......
1) 永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。
在开启了防火墙时,做如下设置,开启相关端口, ......
又碰到邮件问题,在magento前台注册新用户,下订单都没有收到邮件。但是提示都是说正常。
直接在ssh中使用下列命令测试,连接超时:
echo "Subject: test" | /usr/lib/sendmail -v xinhaozheng@gmail.com
提示:
WARNING: local host name (server) is not qualified; see cf/README: WHO AM I?
xinhaozheng ......