記錄一下 建立乙個簡單的字元裝置的編碼過程
前提準備:已經編譯好的linux核心
進入../drivers/char/目錄
這裡存放著這字元裝置驅動
mkdir globalmem 建立乙個我們新建驅動的目錄並進入
新建globalmem.c檔案,清單如下
#include #include #include #include #include #include #define globalmem_size 0x1000
#define mem_clear 0x1
#define globalmem_major 230
static int globalmem_major=globalmem_major;
module_param(globalmem_major,int,s_irugo);
struct globalmem_dev
;struct globalmem_dev *globalmem_devp;
static int globalmem_open(struct inode *inode,struct file *filep)
static int globalmem_release(struct inode *inode,struct file *filep)
static long globalmem_ioctl(struct file *filep,unsigned int cmd,unsigned long arg)
return 0;
}static ssize_t globalmem_read(struct file *filep,char __user * buf,size_t size,loff_t * ppos)
if(count>globalmem_size-p)
if(copy_to_user(buf,dev->mem+p,count))
else
return ret;
}static ssize_t globalmem_write(struct file *filp, const char __user * buf,size_t size, loff_t * ppos)
return ret;
}static loff_t globalmem_llseek(struct file *filp, loff_t offset, int orig)
if ((unsigned int)offset > globalmem_size)
filp->f_pos = (unsigned int)offset;
ret = filp->f_pos;
break;
case 1:
if ((filp->f_pos + offset) > globalmem_size)
if ((filp->f_pos + offset) < 0)
filp->f_pos += offset;
ret = filp->f_pos;
break;
default:
ret = -einval;
break;
}return ret;
}static const struct file_operations globalmem_fops = ;
static void globalmem_setup_cdev(struct globalmem_dev *dev,int index)
static int __init globalmem_init(void)
if(ret<0)
return ret;
globalmem_devp = kzalloc(sizeof(struct globalmem_dev),gfp_kernel);
if(!globalmem_devp)
globalmem_setup_cdev(globalmem_devp,0);
return 0;
fail_malloc:
unregister_chrdev_region(devno,1);
return ret;
}module_init(globalmem_init);
static void __exit globalmem_exit(void)
module_exit(globalmem_exit);
module_author("ztt");
module_license("gpl v2");
新建makefile檔案,清單如下:
config_module_sig=n
kvers = $(shell uname -r)
# kernel modules
obj-m += globalmem.o
build: kernel_modules
kernel_modules:
make -c /lib/modules/$(kvers)/build m=$(curdir) modules
clean:
make -c /lib/modules/$(kvers)/build m=$(curdir) clean
然後在建立的目錄下執行命令 make
編譯驅動,會在該目錄下生成globalmem.ko檔案
載入該模組 insmod globalmem.ko
執行 cat /proc/devices
可以看到新定義的字元裝置驅動,主裝置號為230
執行命令:mknod /dev/globalmem c 230 0
建立「/dev/globalmem」裝置節點
通過執行:
echo "hello world" > /dev/globalmem 驗證裝置的寫
cat /dev/globalmem 驗證裝置的讀#輸出hello world
進入/sys/module/可以找到globalmem目錄 使用tree命令 可觀察其目錄結構
mysql第六章 第六章 mysql日誌
第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...
第六章 指標
1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...
第六章總結
6.1 使用滑鼠 6.1.1 滑鼠時間和滑鼠訊息 根據使用者操作滑鼠時滑鼠的位置,滑鼠訊息分為兩類 客戶區滑鼠訊息和非客戶區滑鼠訊息。1.客戶去滑鼠訊息 2.當滑鼠游標位於視窗的使用者區時,將生成客戶滑鼠訊息。滑鼠訊息和鍵盤訊息有所不同,windows 只將鍵盤有訊息傳送給具有輸入極點的視窗,但滑鼠...