#pragma pack(1)
/dev 目錄下存放 裝置節點
/sys 目錄下存放 所有的裝置檔案
/proc 目錄下存放 所有的核心
//動態載入模組
insmod hello.ko
//動態解除安裝模組
rmmod hello
2.linux下裝置的分類
字元裝置:
塊裝置:
網路裝置:
3.編寫驅動時如何區分裝置的:
4.註冊字元裝置驅動的流程:
(1)確定裝置號: 動態註冊:alloc_chrdev_region
靜態註冊:首先通過 cat /proc/devices 命令檢視已經被使用的裝置號,選用沒用被用過的。
register_chrdev_region(); //向系統註冊裝置號
int register_chrdev_region(dev_t from,unsigned count, const char *name);
返回值:0 成功 負數失敗。
引數:dev_t from 裝置號起點。
(2)編寫操作方法(構建file_operations)
(3) 構建cdev, 將cdev增加到系統。
5.核心中每個字元裝置都會有乙個專門管理的結構體:
struct cdev ;
6.cdev_init// 初始化cdev結構體
void cdev_init(struct cdev *cdev, const struct file_operations *fops)
引數:struct cdev *cdev 需要初始化的cdev
const struct file_operations *fops 操作方法集合
cdev_add 向系統增加cdev裝置
int cdev_add(struct cdev *p, dev_t dev, unsigned count)
返回值:0 成功 負數 失敗
引數:struct cdev *p 需要增加的cdev
dev_t dev 裝置號
unsigned count 裝置個數
cdev_del //刪除裝置
void cdev_del(struct cdev *p)
引數: struct cdev *p 需要刪除的cdev
open成功時,使用者空間 有了fd
核心建立乙個struct file *file 記錄本次的資訊 --》私有指標
ssize_t read(int fd, void *buf, size_t count);
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
返回: 返回給使用者的read函式
引數:struct file *
char __user * read的第二個引數
size_t read的第三個引數
loff_t * 檔案描述符指標
ssize_t write(int fd, const void *buf, size_t count);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
返回: 返回給使用者的write函式
引數:struct file *
char __user * write的第二個引數
size_t write的第三個引數
loff_t * 檔案描述符指標
mknod /dev/mytest c 253 0
裝置節點 字元 主號 次號
核心空間不能直接使用使用者空間指標
unsigned long copy_from_user(void *to, const void __user *from, unsigned long n) ;完成從使用者空間到核心空間資料拷貝
返回值 : 0 成功 負數失敗
引數:void *to 核心空間
const void __user *from 使用者空間
unsigned long n 位元組數
unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
完成從核心到使用者
返回值 : 0 成功 負數失敗
void __user *to 使用者空間
const void *from 核心空間
unsigned long n 位元組數
CSS實現強制換行 Day 78
其實最早的時候也考慮過這個問題,當時還在想需要判定文字的長度麼,實在是傻到極點了,原來css中本來就有這個樣式設定的。而今天正好看到了有這麼一篇介紹,仔細看了下,感覺還不錯,這裡也把實驗的結果記錄下。初始階段 comedycookidespitelovedescriptiondescription ...
焱飛科技實習日誌 Day7 8
這周實際上只打了三天工。因為之後都陪家人出去旅遊了。但由於各種各樣的原因,每天都忘記了寫日誌,所以就這週回家了囤到一起寫。這兩天發現學的東西太多了,有點吸收不過來。索性停下來,總結前面學的所有東西。目前總結了檔案輸入輸出那個板塊,numpy和pandas還沒有總結完。只能說自己再梳理一遍,真的會清晰...
Day78 requests模組使用
在命令列工具中使用 pip install requests 使用前需要匯入 import requests下面我們來看一下requests庫的幾種常用高階用法 會話物件from requests import session s session 會話拿到 r s.get print r print...