linux ioctlº¯Êý¼°ÆäÇý¶¯ºÍÓ¦ÓóÌÐò×¢ÒâÊÂÏî
¹ØÓÚIOCTLÇý¶¯µÄ±àд·½·¨LDDÕâ±¾ÊéȷʵдµÄ±È½ÏÃ÷°×ÁË£¬ÔÚÕâÄØÎҾͼòµ¥µÄ×öÒ»¸ö½éÉÜ¡£ÕâÀïÎÒÖ÷ÒªÃèÊö×Ô¼º±àдIOCTLÇý¶¯Ê±ËùÓöµ½µÄÎÊÌâ¼°ÆäÔÒò¡£
Çý¶¯ÀïµÄioctlº¯ÊýÖ÷ҪʵÏÖ²»ÓÃread,writeº¯ÊýµÄÓëÓû§¿Õ¼äµÄ¼òµ¥Êý¾Ý½»»¥¼°ÎÞ²ÎÊýµÄÃüÁî¿ØÖÆ¡£ÄÇôÎÒÃÇÈçºÎʵÏÖÕ⼸ÖÖ¹¦ÄܵÄIOCTLº¯ÊýÄØ£¿ioctlÇý¶¯ÖÐÒÔSWITCH£ûcase A,case B£ý½á¹¹ÒÔʵÏÖ¶Ô²»Í¬ÃüÁîµÄÏìÓ¦£¬Ê×ÏÈÎÒÃÇÒª¶ÔÎÒÃÇҪʹÓõēA”£¬“B”ÃüÁÒåÒ»¸öÕû¸ö²Ù×÷ϵͳÄÚΨһµÄ±êʶ£¬Í¬Ê±Õâ¸ö±êʶÓÖÄܹ»±íÃ÷ÎÒÃǵIJÙ×÷ÀàÐͼ°´«µÝ²ÎÊýµÄÀàÐÍ£¨Èç¹ûÐèÒªµÄ»°£©¡£linuxϵͳµÄÿһ¸öÃüÁîºÅ±»·ÖΪ¶à¸öλ×ֶΣ¬ÕâЩλ×ֶΰüÀ¨type,number,direction,size,·Ö±ð±íʾ»ÃÊý£¨ÓëÉ豸Ïà¹ØµÄÒ»¸ö×Öĸ£¬ÒÔ±ÜÃâÓëÄں˳åÍ»£©£¬ÐòÊý£¨ÃüÁî±àºÅ£©£¬·½Ïò루ÒÔÓû§¿Õ¼äΪ²ÎÕյĶÁ£¬Ð´ºÍÎÞÊý¾Ý´«Ê䣩£¬size£¨´«µÝ²ÎÊýÀàÐÍ£©¡£ÄÚºËÖÐ/include/asm/ioctl.h,/Documentation/ioctl-number.txtÁ½¸öÎļþ±íÃ÷ÁËÎÒÃÇÓ¦¸ÃÈçºÎ¶¨ÒåioctlÃüÁî±àºÅ¼°×Ô¶¨ÒåµÄ»ÃÊý£¬¡£
¿´ÆðÀ´¹¹ÔìIOTCLÃüÁîÕâô¸´ÔÓ£¬ÇìÐÒµÄÊÇÄÚºËÒѾΪÎÒÃDZàдÁ˹¹ÔìÃüÁî±àºÅµÄºêÃüÁî¡££ßIO£¨type,nr£©,_IOR(type,nr,datatype),_IOW(type,nr,datatype)¡£ËüÃÇÔÚ<linux/ioctl.h>°üº¬µÄ<asm/ioctl.h>ÖÐÓж¨Ò壬ËùÒÔÔÚÎÒÃǵÄÇý¶¯ÖÐÓ¦°üº¬Õâ¸öÍ·Îļþ¡£ÆäÖУßIO£¨£©ÓÃ×öÎÞ²ÎÊýµÄÃüÁî±àºÅ£¬£ßIOR£¨£©ÓÃ×ö´ÓÇý¶¯ÖжÁÈ¡Êý¾ÝµÄÃüÁî±àºÅ£¬£ßIOW£¨£©ÓÃ×öдÈëÊý¾ÝÃüÁî¡£ LDDÖÐÓãºdefine SCULL_IOC_MAGIC 'k' ,define SCULL_IOCSQUANTUM _IOW(SCULL_IOC_MAGIC,1,int)±íʾSCULL_IOCSQUANTUMÃüÁî±àºÅΪÏòÇý¶¯ÖÐдÊý¾Ý£¬ÃüÁî±àºÅΪ1£¬´«ËͲÎÊýÀàÐÍΪint¡£
ÕâÀï°ÑÎÒËùдµÄ²¿·Ö´úÂëÌù³öÀ´£º
Çý¶¯³ÌÐò²¿·Ö´úÂ룺
#define MOTOR_MAGIC 'k'
#define SET_PULSE _IOW(MOTOR_MAGIC, 1,int)
.
.
static int motor_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)
{ int data=0;
int retval;
switch (cmd) {
case SET_PULSE:
if (copy_from_user(&data, (int *)arg, sizeof(int)))
return -EFAULT;
.
.
.
}
Ó¦ÓóÌÐò²¿·Ö´úÂ룺
#define MOTOR_MAGIC 'k'
#define SET_PULSE _IOW(MOTOR_MAGIC
Ïà¹ØÎĵµ£º
ʲôÊÇϵͳµ÷ÓÃ
¹ËÃû˼Ò⣬ϵͳµ÷ÓÃ˵µÄÊDzÙ×÷ϵͳÌṩ¸øÓû§³ÌÐòµ÷ÓõÄÒ»×é“ÌØÊ┽ӿڡ£Óû§³ÌÐò¿ÉÒÔͨ¹ýÕâ×é“ÌØÊ┽ӿÚÀ´»ñµÃ²Ù×÷ϵͳÄÚºËÌṩµÄ·þÎñ£¬±ÈÈçÓû§¿ÉÒÔͨ¹ýÎļþϵͳÏà¹ØµÄµ÷ÓÃÇëÇóϵͳ´ò¿ªÎļþ¡¢¹Ø±ÕÎļþ»ò¶ÁдÎļþ£¬¿ÉÒÔͨ¹ýʱÖÓÏà¹ØµÄϵͳµ÷ÓûñµÃϵͳʱ¼ä»òÉèÖÃÏµÍ ......
ÎÒÃÇÒ»°ãʹÓÓdate -s”ÃüÁîÀ´ÐÞ¸Äϵͳʱ¼ä¡£±ÈÈ罫ϵͳʱ¼äÉ趨³É2010Äê3ÔÂ5ÈÕµÄÃüÁîÈçÏ¡£
#date -s 03/05/10
½«ÏµÍ³Ê±¼äÉ趨³ÉÖÐÎç8µã52·Ö0ÃëµÄÃüÁîÈçÏ¡£
#date -s 08:52:00
×¢Ò⣬ÕâÀï˵µÄÊÇϵͳʱ¼ä£¬ÊÇlinuxÓɲÙ×÷ϵͳά»¤µÄ¡£
ÔÚϵͳÆô¶¯Ê±£¬Linux ......
void __init mem_init(void)
{
unsigned int codepages, datapages, initpages;
int i, node;
codepages = &_etext - &_text;//Äں˴úÂë¶ÎµÄ´óС¡£
datapages = &_end - &__data_start;//ÄÚºËÊý¾Ý¶ÎµÄ´óС¡£
initpages = &__init_end - &__i ......
vi -r filename £ºÔÚÉÏ´ÎÕýÓÃvi±à¼Ê±·¢Éúϵͳ±ÀÀ££¬»Ö¸´filename
ÒÆ¶¯¹â±êÃüÁî
h£º¹â±ê×óÒÆÒ»¸ö×Ö·û
l £º¹â±êÓÒÒÆÒ»¸ö×Ö·û
j £º¹â±êÏÂÒÆÒ»ÐÐ
k£º¹â±êÉÏÒÆÒ»ÐÐ
^ £ºÐпªÊ¼´¦¡¡¡¡¡¡
$
£ºÐнáÊø´¦
gg£ºÒƶ¯µ½ÎļþµÄ¿ªÍ·
G £ºÒƶ¯µ½ÎļþµÄÄ©¶Ë
[Ctrl] f £º ·Ò³¡£¡¡¡¡
[Ctrl]
b£ºÍù»Ø·Ò³¡£
ÐÞ ......