Linux2 6核心的vivi分割槽及核心MTD分割槽

2021-04-22 06:52:02 字數 3676 閱讀 9815

引言與linux2.4核心相比,linux2.6核心在效能、模組支援、可用性、可測量性等方面有大幅度的提高。linux2.6核心取代2.4核心是大勢所趨。

arm9 s3c2410微處理器是一款由samsung公司為手持終端設計的低**、低功耗、高效能,基於arm920t核的微處理器。它與linux的結合越來越緊密,逐漸在嵌入式領域得到廣闊的應用。目前,在pda、移動通訊、路由器、工業控制等領域都可以看到s3c2410與linux相結合的身影。

當前市場上基於s3c2410微處理器的開發板絕大部分都是用nand flash作為主儲存器。nand flash是一種可在系統上進行電擦寫,掉電後資訊不丟失的儲存器。

開發板從上電到核心啟動需要乙個引導程式,在嵌入式linux系統下稱為boot loader。vivi是南韓mizi公司為其arm9系列產品研發的boot loader。

mtd(儲存技術器件)是linux核心採納的一種裝置子系統,它為底層的儲存晶元提供了統一的裝置介面。

然而,vivi的nand flash分割槽(簡稱vivi分割槽)並不適合linux2.6核心的需求,必須作出修改。而核心mtd分割槽是與vivi分割槽相對應的,隨著vivi分割槽的改變也須重新定製。

本文在分析vivi分割槽與核心mtd分割槽的基本概念及兩者關係的基礎上,詳細介紹了基於s3c2410開發板的linux2.6核心下的vivi及核心mtd分割槽方法。

vivi分割槽和核心mtd分割槽的解析

vivi分割槽解析

vivi分割槽指的是給引導程式、核心映像、檔案系統等在nand flash上分配空間及起始位址。在vivi的命令模式下輸入命令:part show,可得vivi分割槽資訊。未作修改的vivi分割槽資訊如表1。

從資訊中可知,vivi把nand flash分為4個區,分別為vivi、param、kernel、root。資訊中的offset表示各分割槽在nand flash中的起始位置,size及的後面128k、64k、768k、1m+256k表示各分割槽的大小,flag為識別符號。

未修改的vivi給放置核心映像檔案zimage的kernel分割槽只有768k,但2.6核心的映像檔案 一般都超過1m。另外,mizi公司針對其自身產品所設計的vivi只對略大於2m的nand flash空間進行了分割槽;然而,s3c2410開發板的nand flash容量為一般為32m或64m的,還有很大的空間可用。所以,重新定製vivi分割槽十分必要。

核心mtd分割槽解析

linux2.6核心的mtd能夠支援rom、ram、flash(nor和nand)等儲存晶元。mtd同時可提供兩類mtd驅動程式,一類是mtd裝置位址空間的對映,提供直接訪問裝置的操作;另一類則為建立檔案系統提供基礎。

在基於linux2.6核心的s3c2410開發板上,nand flash上各段儲存空間都被定義成mtd分割槽來管理的,各分割槽都可以通過linux系統中的裝置檔案來訪問。所以在核心中必須有mtd對引導程式、核心映像、檔案系統在nand flash上的分割槽資訊。

vivi分割槽與核心mtd分割槽的關係

從nand flash啟動時,s3c2410硬 件會自動把nand flash前4k**拷貝晶元內部ram空間,cpu其實是從內部ram開始執行**的,所以vivi必須放到nand flash頂端。vivi開始執行後將初始化硬體裝置、建立記憶體空間對映表,為呼叫核心做好準備;然後把壓縮的核心映像載入到sdram中;最後跳轉到內 核映像入口,啟動核心。

vivi和核心mtd的重新分割槽

vivi的重新分割槽

根據開發板的nand flash大小及開發用途確定新的vivi分割槽,如表2。

開啟vivi源**下的arch/s3c2410/smdk.c檔案,在函式: 「mtd_partition_default_mtd_partitions={}」中可以看到vivi預設的nand flash分割槽資訊。根據表2的新分割槽資訊,在上述函式中以相同的格式修改原有分割槽資訊即可完成vivi的重新分割槽。

核心mtd的重新分割槽

在給核心mtd重新分割槽之前,有一點應該注意,2.6.16(含)以前核心與2.6.17(含)以後核心的mtd重新分割槽方法是不一樣的,前者是需要增加新的分割槽資訊,而後者源**初始檔案中已含分割槽資訊,需要的是修改分割槽資訊。

linux2.6.16(含)以前核心的mtd重新分割槽

首先,在核心源**arch/arm/mach-s3c2410/devs.c檔案下增加標頭檔案: 「linux/mtd/partitions.h」、「asm/arch/nand.h」、「linux/mtd/nand.h」。注意,因為標頭檔案之間 也有先後關聯的關係,所以要把這三句放到#include「devs.h」下面。若放在其他地方,編譯可能報錯。

然後,同樣在devs.c檔案下,根據表2新增新的分割槽資訊:

static struct mtd_partition partition_info=

{name:「param」,size:0x00010000,offset:0x00020000,},,,

};struct s3c2410_nand_set nandset=;struct s3c2410_platform_nand   superlpplatform=;

最後,在devs.c檔案的s3c_device_nand函式中增加:「.dev=」;在arch/arm/mach-s3c2410/mach-smdk2410.c檔案的「static struct platform_device*smdk2410_

devices_initdata={}」中增加「&s3c_device_nand」。目的是使核心在啟動時初始化nand flash資訊。

linux2.6.17(含)以後核心的mtd重新分割槽

linux2.6.17(含)以後核心的mtd分割槽要比linux2.6.16(含)以前核心簡單很多,因為源**的初始檔案中已含分割槽資訊,只要修改一下就行了。

在源**arch/arm/mach-s3c2410/common-smdk.c檔案下的函式「mtd_partition smdk_default_nand_part={}」中,可以看到預設的mtd分割槽。根據表1,以相同的格式修改原分割槽資訊即可完成mtd的重新分 區。

結語

基於linux2.6核心的linux與arm9 s3c2410的結合將會在嵌入式領域得到廣泛的應用。vivi分割槽與核心mtd分割槽是兩者進行聯合開發的基礎。

1、 嵌入式linux系統開發技術詳解—基於arm,孫紀坤、張小全,人民郵電出版社,2006

2、 arm9嵌入式技術及linux高階實踐教程,陳賾,北京航空航天大學出版社,2005

3、 中國linux公社論壇,《linux2.6.10以後版本對s3c2410的支援》

4、 mizi公司**http://www.mizi.com/developer/s3c2410

Linux2 6核心的vivi分割槽及核心MTD分割槽

與linux2.4核心相比,linux2.6核心在效能 模組支援 可用性 可測量性等方面有大幅度的提高。linux2.6核心取代2.4核心是大勢所趨。arm9 s3c2410微處理器是一款由samsung公司為手持終端設計的低 低功耗 高效能,基於arm920t核的微處理器。它與linux的結合越來...

Linux 2 6核心編譯,核心公升級

本文描述了在fc8下公升級linux核心為2.6.25的詳細步驟.1.首先從如下 得到linux 2.6.25.2.然後在 usr src下untar這個包.tar xjfv linux 2.6.25.tar.bz2 3.配置核心 cd usr src linux 2.6.25 make mrpro...

Linux2 6核心啟動分析

我們已知u boot的終極目的是啟動核心,那麼核心啟動的開始必定是u boot傳入的引數。開啟armlinux.c 發現有一行的 為 thekernel 0,bd bi arch number,bd bi boot params 帶入三個引數 第乙個引數是0,第二個引數是機器id,第三個引數是引數所...