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,那么我们在与
相关文档:
sudo apt-get install 软件名 安装软件命令
sudo nautilus 打开文件(有root权限)
su root 切换到“root”
ls 列出当前目录文件(不包括隐含文件)
ls -a 列出当前目录文件(包括隐含文件)
ls -l 列出当前目录下文件的详细信息
cd .. 回当前目录的上一级目录
cd - 回上一次所在的目录
cd ~ 或 cd 回当 ......
ffmpeg版本:0.5.1 flv -> mp4 ->3gp
#截图:
./ffmpeg -i 视频文件 -y -ss 截图时间 -vframes 1 -f image2 -s 128x96 目标文件名;
#生成预览版:
./ffmpeg -i out.3gp -ss 00:00:00 -t 00:00:10 -s qcif -acodec copy -vcodec copy -y preview.3gp
#转换16:9 flv视频到 4:3的mp4视频
ffmpeg -i src. ......
[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 ......
又碰到邮件问题,在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 ......