Day 78 初始驅動

2021-09-27 22:24:17 字數 2263 閱讀 1910

#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...