讓LINUX核心支援大容量NAND Flash

2021-08-26 08:54:56 字數 1439 閱讀 7423

由於嵌入式控制系統使用了1gb容量的nand flash,因此採用了較新版本的u-boot-1.3.4。而相對於早期uboot版本只能支援到512位元組的頁面大小,u-boot-1.3.4可支援大頁面nand flash。

u-boot-1.3.4中對nand flash的支援有兩套**:/drivers/nand/目錄下是新**,drivers/nand_legacy目錄下是舊**。

為了能夠識別1gb的nand flash晶元,需要移植nand新**。在u-boot-1.3.4/board/atmel/at91rm9200dk/at91rm9200dk.c文件中去掉cfg_nand_ legacy巨集定義,uboot則選擇新**支援nand flash。

// #define cfg_nand_legacy

linux2.6.21在lib_arm/board.c的start_armboot函式呼叫新**nand flash的初始化入口函式nand_init。nand_init函式呼叫/drivers/nand/nand.c檔案中的nand_init_chip函式;緊接著呼叫board_nand_init函式初始化,進而識別nand flash[62]。然而,board_nand_init函式是與平台相關的函式,u-boot-1.3.4中並沒有提供,需要自己編寫。

新**對nand flash的封裝支援很好,只要向上提供底層初始化函式board_nand_init來設定好nand flash的底層介面函式即可。本設計在board/atmel/at91rm9200dk目錄下新建乙個檔案nand.c,在裡面針對at91rm9200實現board_nand_init初始化函式。

首先定義nand flash的位址鎖存使能ale和晶元使能cle,分別是at91rm9200晶元的a22和a21引腳。

#define mask_ale (1 << 22) /* our ale is a22 */

#define mask_cle (1 << 21) /* our cle is a21 */

nand flash的命令和控制採用at91rm9200_nand_hwcontrol函式,有4個選項命令:nand_ctl_setcle(命令鎖存使能)、nand_ctl_setale(位址鎖存使能)、nand_ctl_clrnce(輸出禁止)和nand_ctl_setnce(輸出使能)。工作流程是先呼叫這個函式修改「寫位址」,然後才分別發出控制、位址、資料序列命令。

其中nand_ctl_clrnce命令將晶元使能訊號ce#(pc0)拉高,設定為

at91_set_gpio_value(at91_pin_pc0, 1);

nand_ctl_setnce命令將ce#拉低,使得可以向nand flash寫位址和傳輸資料、命令,其設定是:

at91_set_gpio_value(at91_pin_pc0, 0);

最後,將nand.c檔案編入u-boot1.3.4中,實現對1gb nand flash的識別、擦除、讀寫。

linux支援大容量硬碟

1 fdisk使用msdos格式分割槽,最大支援2t硬碟,要使用大於2t硬碟需使用parted命令使用gpt格式分割槽。2 除修改分割槽格式外,linux核心需新增gpt分割槽格式支援,修改如下 config partition advanced y 如果你想支援各種不同的磁碟分割槽格式 特別是與u...

讓linux核心支援xfs檔案系統

xfs 最初是由 silicon graphics,inc.於 90 年代初開發的。那時,sgi 發現他們的現有檔案系統 existing filesystem,efs 正在迅速變得不適應當時激烈的計算競爭。為解決這個問題,sgi 決定設計一種全新的高效能 64 位檔案系統,而不是試圖調整 efs在...

空格帶來的鬱悶 讓Pxa270支援大容量SD卡

你小看什麼,什麼就會讓你吃驚,讓你從此不敢小看!本來我們的pxa270的bsp是支援大容量sd卡的,我們這裡的一位高人直接修改的public下面的 然後把它移植到bsp下面實現的,這之前他還不知道ms的補丁已經解決了這個問題。這2天領導說要打上所有的ce5的補丁,說這樣對系統的效能可能會有提公升,比...