Linux創始人數據結構,Linux 通用數據結構說明

device_driver include/linux/device.h struct device_driver {

const char???????????? * name; /* 驅動名稱 */

struct bus_type??????? * bus;? /* 總線類型 */

struct completion????? unloaded;? /* 卸載事件通知機制 */ struct kobject????????????????????? kobj; /* sys 中的對象 */

struct klist?????????? klist_devices; /* 設備列表 */ struct klist_node?????????????????????? knode_bus; /* 總線結點列表 */

struct module????????? * owner;/* 所有者 */

/* 設備驅動通用方法 */

int???? (*probe)?? ?(struct device * dev); /* 探測設備 */ int??? (*remove)? ?(struct device * dev); /* 移除設備 */ void??? (*shutdown)???? (struct device * dev); /* 關閉設備 */

/* 掛起設備?????? ?*/

int??? (*suspend)???? (struct device * dev, pm_message_t state, u32 level); int?????? (*resume)????? (struct device * dev, u32 level); /* 恢復 */

};

platform_device include/linux/device.h struct platform_device {

const char???? * name;? /* 名稱 */

u32??????????? id;????? /* 設備編號, -1 表示不支持同類多個設備 */ struct device dev;?????????????? /* 設備 */

u32??????????? num_resources; /* 資源數 */ struct resource * resource; /* 資源列表 */

};

3. resource struct resource {

const char name;????????? /*

資源名稱 */

unsigned

long start, end; /* 開始位置和結束位置 */ unsigned long flags;???????????????????????? /* 資源類型 */

/* 資源在資源樹中的父親,兄弟和孩子

*/ struct resource *parent, *sibling, *child;

};

4. device include/linux/device.h

struct device {

struct klist?????????? klist_children;

/* 在設備列表中的孩子列表 */ struct klist_node?????????????????????? knode_parent;?? /* 兄弟結點 */

struct

klist_node? knode_driver;?? /* 驅動結點 */ struct klist_node?? knode_bus;??? /* 總線結點 */ struct device?? parent; /* 父親?? ?*/

struct kobject kobj;?????????????????? /* sys結點 */ char

bus_id[BUS_ID_SIZE];

struct semaphore

sem;??? /* 同步驅動的信號量 */

struct bus_type * bus;??????? /* 總線類型??????? ?*/

struct device_driver *driver;?? /* 設備驅動????? */ void? *driver_data;

/* 驅動的私有數據? ?*/

void?????????? *platform_data; /* 平臺指定的數據,為 device

核心驅動保留 */ void?????????????? *firmware_data; /* 固件指定的數據,為 device

核心驅動保留 */ struct dev_pm_info

power;???? /* 設備電源管理信息 ?*/

u64??????????? *dma_mask;????? /* DMA掩碼???????? ?*/

u64??????????? coherent_dma_mask;

struct

list_head dma_pools;???? /* DMA緩沖池????? ?*/

struct dma_coherent_mem *dma_mem; /* 連續 DMA 內存的起始位置

*/

void??? (*release)(struct device * dev);? /*

釋放設置方法 */

};

nand_hw_control

include/linux/mtd/nand.h struct nand_hw_control {

spinlock_t?? lock;? ?/* 自旋鎖,用于硬件控制 */ struct nand_chip *active; /* 正在處理 MTD 設備

*/ wait_queue_head_t wq;???? ?/* 等待隊列??? */

};

nand_chip

include/linux/mtd/nand.h struct nand_chip {

void??? iomem?? *IO_ADDR_R; /* 讀地址 */ void??? iomem?????????????? *IO_ADDR_W; /* 寫地址 */

/* 字節操作?? */

u_char???????? (*read_byte)(struct mtd_info *mtd);? /*

讀一個字節 */

void?????????? (*write_byte)(struct mtd_info *mtd, u_char byte); /* 寫一個字節 */

/*

雙字節操作 */

u16??????????? (*read_word)(struct mtd_info mtd); /* 讀一個字 */

void?????????? (*write_word)(struct mtd_info *mtd, u16 word); /* 寫一個字 */

/*

buffer 操作 */

void?????????? (*write_buf)(struct mtd_info *mtd, const u_char *buf, int len); void?????????????? (*read_buf)(struct mtd_info

*mtd, u_char *buf, int len);

int??????????? (*verify_buf)(struct

mtd_info *mtd, const u_char

*buf, int len);

/*

選擇一個操作芯片 */

void?????????? (*select_chip)(struct

mtd_info *mtd, int chip);

/*

壞塊檢查操作 */

int??????????? (*block_bad)(struct

mtd_info *mtd, loff_t ofs, int getchip);

/*

壞塊標記操作 */

int??????????? (*block_markbad)(struct

mtd_info *mtd, loff_t ofs);

/*

硬件控制操作 */

void?????????? (*hwcontrol)(struct

mtd_info *mtd, int cmd);

/*

設備準備操作 */

int??????????? (*dev_ready)(struct

mtd_info *mtd);

/*

命令發送操作 */

void?????????? (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column, int

page_addr);

/*

等待命令完成 */

int??????????? (*waitfunc)(struct mtd_info

*mtd, struct nand_chip

*this, int state);

/*

計算 ECC 碼操作 */

int??????????? (*calculate_ecc)(struct

mtd_info *mtd, const u_char *dat,

u_char

*ecc_code);

/*

數據糾錯操作 */

int??????????? (*correct_data)(struct mtd_info *mtd, u_char *dat, u_char *read_ecc,

u_char *calc_ecc);

/*

開啟硬件 ECC */

void?????????? (*enable_hwecc)(struct

mtd_info *mtd, int mode);

/* 擦除操作???? */

void?????????? (*erase_cmd)(struct

mtd_info *mtd, int page);

/* 檢查壞塊表?? */

int??????????? (*scan_bbt)(struct

mtd_info *mtd);

int??????????? eccmode;?? /* ECC 模式????? */

int??????????? eccsize;?? /* ECC 計算時使用的字節數 */

int??????????? eccbytes;? /*

ECC 碼的字節數 */

int??????????? eccsteps;? /*

ECC 碼計算的步驟數 */

int??????????? chip_delay;

/* 芯片的延遲時間 */ spinlock_t?????????????? chip_lock;? /*

芯片訪問的自旋鎖 */ wait_queue_head_t wq;??????????? /* 芯片訪問的等待隊列 */ nand_state_t? state;? /*

Nand Flash 狀態 */

int??????????? page_shift; /* 頁右移的位數,即 column

地址位數 */

int??????????? phys_erase_shift; /* 塊右移的位數, 即 column 和頁一共的地址位數 */ int?????????????? bbt_erase_shift; /* 壞塊頁表的位數 */

int??????????? chip_shift; /* 該芯片總共的地址位數 */

u_char???????? *data_buf;? /*

數據緩沖區 */

u_char???????? *oob_buf;? /*

oob 緩沖區 */

int??????????? oobdirty;? /*

oob 緩沖區是否需要重新初始化 */

u_char???????? *data_poi;? /* 數據緩沖區指針 */ unsigned int?????????????? options;?? /*

芯片專有選項 */

int??????????? badblockpos;/* 壞塊標示字節在 OOB 中的位置 */

int??????????? numchips;? /* 芯片的個數?? */

unsigned

long

chipsize;

/*

在多個芯片組中, 一個芯片的大小 */

int

pagemask;

/* 每個芯片頁數的屏蔽字, 通過它取出每個芯片包含多少個頁 */

int

pagebuf;

/*

在頁緩沖區中的頁號 */

struct nand_oobinfo??? *autooob; /* oob 信息 */ uint8_t? *bbt;????????????????????? /* 壞塊頁表 */

struct nand_bbt_descr?????????????? *bbt_td;

/* 壞塊表描述 */

struct nand_bbt_descr? *bbt_md; /*

壞塊表鏡像描述 */

struct nand_bbt_descr? *badblock_pattern; /* 壞塊檢測模板 */

struct nand_hw_control *controller; /* 硬件控制 */

void?????????? *priv;

/* 私有數據結構 */

/*

進行附加錯誤檢查 */

int??????????? (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, int status, int page);

};

mtd_info include/linux/mtd/mtd.h struct mtd_info {

u_char type;?? /* 設備類型?? */ u_int32_t flags; /* 設備標志位組 */ u_int32_t

size; /* 總共設備的大小 */ u_int32_t

erasesize;? /* 擦除塊的大小 */

u_int32_t

oobblock; /* OOB 塊的大小,如:512 個字節有一個 OOB */ u_int32_t oobsize; /* OOB數據的大小,如:一個 OOB 塊有 16 個字節

*/ u_int32_t ecctype; /* ECC 校驗的類型 */

u_int32_t eccsize;? /* ECC 碼的大小? */

char

*name;??????? /* 設備名稱?????? */

int

index;???????? /* 設備編號?????? */

/* oobinfo

信息,它可以通過 MEMSETOOBINFO ioctl 命令來設置 */ struct nand_oobinfo oobinfo;

u_int32_t

oobavail;? /* OOB區的有效字節數,為文件系統提供 */

/* 數據擦除邊界信息???????? */

int numeraseregions;

struct mtd_erase_region_info *eraseregions;

u_int32_t

bank_size; /* 保留 */

/*

擦除操作 */

int (*erase) (struct mtd_info *mtd,

struct erase_info *instr);

/* 指向某個執行代碼位置 */

int (*point) (struct mtd_info *mtd,

loff_t from,

size_t len, size_t *retlen, u_char **mtdbuf);

/*

取消指向 */

void (*unpoint)

(struct mtd_info *mtd, u_char *

addr, loff_t from, size_t len);

/*

讀/寫操作 */

int (*read) (struct

mtd_info *mtd, loff_t

from, size_t len, size_t *retlen, u_char *buf); int (*write) (struct mtd_info

*mtd, loff_t to, size_t

len,

size_t *retlen, const u_char *buf);

/* 帶 ECC 碼的讀/寫操作 */

int

(*read_ecc) (struct mtd_info

*mtd, loff_t from, size_t len,

size_t *retlen, u_char *buf,

u_char *eccbuf, struct nand_oobinfo *oobsel);

int (*write_ecc) (struct mtd_info

*mtd, loff_t to, size_t len, size_t *retlen,

const u_char *buf, u_char *eccbuf, struct

nand_oobinfo *oobsel);

/* 帶 OOB 碼的讀/寫操作 */

int

(*read_oob) (struct mtd_info

*mtd, loff_t from, size_t len,

size_t *retlen, u_char *buf);

int

(*write_oob) (struct mtd_info

*mtd, loff_t to, size_t

len, size_t *retlen, const u_char *buf);

/* 提供訪問保護寄存器區的方法 */

int (*get_fact_prot_info) (struct

mtd_info *mtd, struct

otp_info *buf, size_t

len); int (*read_fact_prot_reg) (struct

mtd_info *mtd, loff_t

from, size_t len,

size_t *retlen, u_char *buf);

int (*get_user_prot_info) (struct

mtd_info *mtd, struct

otp_info *buf, size_t

len); int (*read_user_prot_reg) (struct

mtd_info *mtd, loff_t

from, size_t len,

size_t *retlen, u_char *buf);

int (*write_user_prot_reg) (struct

mtd_info *mtd, loff_t from, size_t len,

size_t *retlen, u_char *buf);

int (*lock_user_prot_reg) (struct

mtd_info *mtd, loff_t from, size_t len);

/* 提供 readv

和 writev 方法???????? */

int

(*readv) (struct mtd_info

*mtd, struct kvec *vecs, unsigned long count, loff_t from, size_t *retlen);

int

(*readv_ecc) (struct mtd_info

*mtd, struct kvec *vecs, unsigned long count, loff_t from, size_t *retlen, u_char *eccbuf,

struct nand_oobinfo *oobsel);

int (*writev) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, size_t *retlen);

int (*writev_ecc) (struct mtd_info

*mtd, const struct kvec *vecs,

unsigned long count, loff_t to, size_t *retlen, u_char *eccbuf, struct

nand_oobinfo *oobsel);

/*

同步操作 */

void (*sync) (struct mtd_info *mtd);

/* 芯片級支持的加/解鎖操作 */

int (*lock) (struct mtd_info *mtd, loff_t ofs, size_t len);

int (*unlock) (struct mtd_info *mtd, loff_t ofs, size_t len);

/* 電源管理操作?????????? */

int (*suspend) (struct mtd_info *mtd); void (*resume) (struct mtd_info *mtd);

/* 壞塊管理操作?????????? */

int (*block_isbad) (struct mtd_info *mtd, loff_t ofs); int (*block_markbad) (struct mtd_info *mtd, loff_t ofs);

/* 重啟前的通知事件??????? */

struct

notifier_block reboot_notifier; void *priv; /* 私有數據結構 */

struct module

*owner; /* 模塊所有者 */ int usecount; /* 使用次數 */

};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534772.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python在瀏覽器運行一片空白_Webdriver啟動Firefox瀏覽器后,頁面顯示空白

在使用pycharm碼代碼時編譯總是出錯,后來驗證發現瀏覽器啟動后出現問題。白白耗了我2個小時。我把我的解決方案寫出來,希望對大家有幫助。1.現象:起初安裝的時候總是能正常運行,有一天突然發現Webdriver打開fFirefox瀏覽器后&…

centos linux7修改主機名,CentOS7操作系統下永久修改主機名

操作系統:CentOS Linux release 7.8任務:修改主機名為sky9899操作步驟如下:[root146 ~]# hostname*.*.*.*.adsl-pool.jx.chinaunicom.com[root146 ~]# hostnamectlStatic hostname: localhost.localdomainTransient hostname: *.*.*.*.adsl-…

稀疏自編碼器_自編碼(AutoEncoder)模型及幾種擴展之二

4. 稀疏自編碼假設我們只有一個沒有類別標簽的訓練樣本集合{x(1),x(2)...},一個自編碼神經網絡就是一種非監督學習算法,它使用BP算法,并將目標值設為: y(i)x(i)。我們的目標是希望得到hW,b(X)≈x。用aj(2)(x)表示輸入向量x對隱藏層單元j的激活…

linux x86 關機 過程,linux在x86上的中斷處理過程(詳細)

Linux在x86上的中斷處理過程一:引言在Intel的文檔中,把中斷分為兩種。一種是異常,也叫同步同斷。一種稱之為中斷,也叫異常中斷。同步中斷指的是由CPU控制單元產生,之所以稱之為同步,是因為只有一條指令執行完畢后才會發出中斷。例如除法運算中,除數為零的時候,就會產…

thymealf 高級用法_Thymeleaf

JSP 已經存在很長時間了,很多公司還在用,它看起來像 HTML,但其實并不是,它有一些缺陷。比如,每個頁面頂部都需要有如下聲明與 Servlet 規范緊密耦合的,依賴 Servlet 容器(意味著無法直接瀏覽效果)。工作過的…

linux 顯卡轉碼,ffmpeg用GPU轉碼

8種機械鍵盤軸體對比本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?有些視頻編碼太屌,播放起來對CPU消耗巨大,而在電視上或者電視盒子上看視頻,編碼就需要合適,樓主用的FireTV Stick&a…

ant實例 jmeter_Jmeter+ant搭建環境

1.將jmeter3.3和ant1.9.6放在一個文件夾下2.配置環境a、安裝jdk,配置環境變量變量名: JAVA_HOME變量值: C:\Program Files\Java\jdk1.8.0_91 (即jdk安裝的位置)變量名: Path (這個變量名已在系統變量中存在,現只需在這…

c語言課程設計作業五子棋,C語言課程設計報告五子棋游戲課程設計

C語言課程設計報告五子棋游戲課程設計 C語言課程設計報告_五子棋游戲-課程設計C語言課程設計報告_五子棋游戲|c語言程序代碼編程小程序設計|c語言課程設計報告課程案例**********************************************************//* 本程序在Turbo C或Borland C下編譯通過 */…

sqlmap圖形化_Web安全:SQL注入工具

原標題:Web安全:SQL注入工具SQL注入工具主要是針對Web服務器后臺數據庫的注入,其主要目的是獲取數據庫中的數據。以前常用的SQL注入工具有啊D注入工具及Domain(明小子注入工具),現在常用的SQL注入工具有HackBar、SQLMap、Pangolin…

在c語言程序中 對文件進行操作首先要,《C語言程序設計》試題八及答案

版權聲明:以上文章中所選用的圖片及文字來源于網絡以及用戶投稿,由于未聯系到知識產權人或未發現有關知識產權的登記,如有知識產權人并不愿意我們使用,如果有侵權請立即聯系:55525090qq.com,我們立即下架或…

vue中多行文本標簽_vue控制多行文字展開收起的實現示例

這里講一下,如何使用vue控制多行文字展開收起(也叫控制文字展開隱藏)。效果:這里設置了控制三行,如果超過三行會展示,“顯示更多” 超出文字顯示省略號。點擊“顯示更多”會展開所有文案,按鈕變成“收起”(未超出三行的…

c語言什么時候需要加分號,歸納一下html中什么時候需要分號什么時候需要冒

公告: 為響應國家凈網行動,部分內容已經刪除,感謝讀者理解。話題:歸納一下html中什么時候需要分號什么時候需要冒號什么時候問題詳情:最近初學html和php,弄暈了回答:一般情況下,HTML…

python wheel使用_【轉載】Python,使用Wheel打包

轉載自: http://blog.sina.com.cn/s/blog_1318255b00102wbtz.htmlPython的第一個主流打包格式是.egg文件,現在大家庭中又有了一個叫做Wheel(*.whl)的新成員。wheel“被設計成包含PEP 376兼容安裝(一種非常接近于磁盤上的格式)的所有文件”。在本文中&…

c語言提取七位數講解,C語言-體育彩票7位數,感受身中500萬的fell

//體育彩票7位數,感受身中500萬的fell#include #include #include #include //用到隨機數函數#include int main(){int iUser[7]; //保存我們購買彩票的號碼int iSys[7];//保存開獎的號碼int i, j;int count 0;//保存我們中獎號碼的個數//srand((unsigned)time(0…

cuda linux編譯器_linux下如何編譯CUDA+QT(qtcreator下)

具體操作,修改qt項目配置文件pro,在配置后面加入如下代碼,我們就實現了qtcuda的交叉編譯。# 讓你的項目可以看到后綴cu的cuda代碼文件OTHER_FILES ./Bll/ImageReconstruction/Cuda/CudaFDK.cu \./Bll/ImageReconstruction/Cuda/CudaFDK_ker…

linux的sonar安裝,Linux安裝sonar

前置依賴? mysql 5.6 or 5.7? jdk 1.81.下載2.安裝unzip并解壓sonarqube并移動到/usr/localyum install unzipunzip sonarqube-6.7.4.zipmv sonarqube-6.7.4 /usr/local/3.mysql里新增數據庫CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;4.修改sonarqube相應的配置vim …

redis內存淘汰和持久化_redis 持久化

一、RDB持久化(一)、RDB介紹可以在指定的時間間隔內生成數據集的 時間點快照(point-in-time snapshot),新快照會覆蓋老快照(二)、優點壓縮格式,恢復速度快,適合于用做備份…

android實現后臺靜默安裝,Android 靜默安裝實現方法

Android靜默安裝的方法,靜默安裝就是繞過安裝程序時的提示窗口,直接在后臺安裝。注意:靜默安裝的前提是設備有ROOT權限。代碼如下:/*** 靜默安裝* param file* return*/public boolean slientInstall(File file) {boolean result …

pythonwrite連續寫入_python文件寫入write()的操作

本文實例為大家分享了python文件寫入write()的操作的具體代碼,供大家參考,具體內容如下filename pragramming.txtwith open(filename,w) as fileobject: #使用‘w來提醒python用寫入的方式打開fileobject.write(i love your name!\ni love your cloth!\…

最新變態傳奇android,新開變態傳奇單職業

新開變態傳奇單職業這款傳奇手游中擁有這極為豐富的游戲玩法,玩家既可以進入各種副本中,挑戰那些強大的副本boss,也可以和自己的兄弟好友們一起組隊,前往各種跨服戰場,和全服的高手玩家們一起進行最激烈的戰斗。游戲中…