Linux裝置驅動移植注意事項

2021-08-28 10:16:11 字數 1346 閱讀 5585

s64只能在核心空間使用

_ _u8

、_ _u16

、_ _u32

用來使用者空間

驅動中最好使用

int8_t

、int16_t

、int32_t

、uint8_t

、uint16_t

、uint32_t

、int64_t

、uint64_t

這些 c99

標準確定長度型別

預設情況下,編譯器為結構體的每個成員按其自然對界(

natural alignment

)條件分配空間,各個成員按照它們被宣告的順序在記憶體中順序儲存,第乙個成員的位址和整個結構的位址相同。自然對界指按結構體的成員中

sizeof

最大的成員對齊

採用 little endian

模式的

cpu

對運算元的存放方式是從低位元組到高位元組,而

bigendian

模式對運算元的存放方式是從高位元組到低位元組

記憶體頁一般在4-64k大小。不同的 page_size 和 page_shift可以確定申請記憶體大小

當在核心空間中通過 get_free_pages()函式申請記憶體時,公式如下:page_size * 2order

即,page_size和order確定記憶體大小。

一:無作業系統的硬體訪問方法中往往沒有實體地址到虛擬位址的對映過程,因此,在搬到 linux 系統中的時候,要注意以靜態對映或 ioremap()等方式對映到虛擬位址

二:硬體訪問中往往夾雜著延時,因此,在無作業系統的原始碼中,經常會出現***_delay()這樣的 for 迴圈延遲,這些**應該被核心中的 ndelay()或 udelay()替換。如果延遲時間達到數十 ms,應該使用 msleep()或 msleep_interruptible()等函式

三:如果系統中用的 linux 不支援搶占排程,while (!(regb &0x1));需要相當長的時間(如數十 ms),這種忙等待會導致其他的程序全部得不到機會執行

四:從良好的**風格角度出發,模組中不需要輸出到核心空間且不需為模組中其他檔案所用的全域性變數及函式最好顯式申明為

static

型別,需要輸出的核心符號最好以模組名為字首

NAND FLASH驅動注意事項

1.nand flash寫入只能由1寫為0,所以寫入前必須先擦除,擦除後所有資料為1.2.2k大頁面的64位元組冗餘資料按照飛凌的定義為 第0位為壞塊標記,第1 4位為2k頁面的ecc校驗,其他為0xff。3.k9f1g08u0b的位址線有28根,對應空間應該是256mb,而實際空間為128mb,我...

Linux 注意事項

1 linux嚴格區分大小寫,linux的命令都是小寫,但命令後的選項會有大寫 touch 建立檔案 2 linux中一切皆檔案 linux中所有的內容都是以檔案的形式儲存和管理的,硬體裝置也是檔案,這和windows完全不同,windows是通過裝置管理器來管理硬體的。linux的裝置檔案儲存在 ...

oracle移植到mysql注意事項

1 大小寫敏感的區別 oracle 一般不區分大小寫,表名和欄位名稱預設轉換為大寫 表名和欄位名加上雙引號後會區分。mysql 取決於作業系統的大小寫敏感性。解決辦法 mysql的資料庫名和oracle的大小寫保持一致,表名和應用程式中的sql字串中的表名保持一致。2 保留字的區別 oracle中保...