內核kernel以及根文件系統rootfs是如何映射到對應的nand flash的

?原文
初始化代碼讀取uboot到內存里面,然后跳轉到uboot那里去執行uboot,uboot初始化必要的硬件,加載一些驅動,其中包括nand flash的驅動,然后根據uboot里面設置的一個啟動命令
TAG: NAND??rootfs??Flash??

【系統啟動過程簡介】
初始化代碼讀取uboot到內存里面,然后跳轉到uboot那里去執行uboot,uboot初始化必要的硬件,加載一些驅動,其中包括nand flash的驅動,然后根據uboot里面設置的一個啟動命令:

nand read 0x30007FC0 0x100000 0x200000;bootm 0x30007FC0
意思就是,先去讀取nand flash,從0x100000開始,長度為0x200000的數據到memory的0x30007FC0處,然后bootm表示從memory的0x30007FC0開始運行。
也就是去運行內核鏡像了。
然后,內核會自己解壓縮,然后執行,
初始化硬件,
加載驅動模塊,
最后去掛載rootfs,
而此文件系統是什么格式的,是從uboot里面定義的:
#define CONFIG_BOOTARGS?? "root=/dev/mtdblock2 rw init=/linuxrc console=ttyS0,115200 mem=16M rootfstype=yafffs2"
并在從uboot掉轉到內核運行時候,傳遞給內核的,這樣內核在加載rootfs的時候,才知道,要以什么格式,比如上面的yaffs2格式,去加載此文件系統。
此文件系統,也是你實現自己用相應的文件系統制作工具,制作的,然后燒寫到對應的位置的。
上面中root=/dev/mtdblock2,表示,要去/dev/mtdblock2,也就是mtd的第3個分區,去加載。
而這里的mtd的第3個分區具體對應的nand flash中的的地址,是你在內核中,一般是在core.c自己定義的的nand flash的分區。
一般是uboot是第一個分區,內核kernel是第二個,然后就是rootfs是第三個分區,也就是/dev/mtdblock2。
例如分區:
static struct mtd_partition rm9200_partitions[3] =
{
??????? {??????? /* uboot 256K */
??????????????? .name = "uboot",
??????????????? .size = 0x40000,
??????????????? .offset = 0
??????? },
??????? {??????? /* kernel 1.768M */
??????????????? .name = "kernel",
??????????????? .size = 0x1C0000,
??????????????? .offset = 0x40000
??????? },
??????? {??????? /* rootfs 2M */
??????????????? .name = "rootfs",
??????????????? .size = 0x200000,
??????????????? .offset = 0x200000
??????? },
};

如果按照上面分區,定義的/dev/mtdblock2的起始地址是0x200000,還算成大小是2M的位置,然后,內核啟動掛載rootfs的時候,就是,以上面從uboot傳過來的參數中yaffs2格式,到nand flash 的2M的地址讀取并加載rootfs,加載完成后,這樣,里面對應的根目錄,以及所有的文件,文件夾就都可以識別了。
然后才會去讀取并運行初始化腳本相關的東西,最后初始化console控制臺,然后才能看到那個常見的#,才可以輸入命令,比如ls,才可以和系統交互。

所以,實際就是這個rootfs,對應著mtdblock2,對應的某個nand flash上的地址,比如此處的2M的地方。而不是內核kernel這個文件映射的。

(hainei_)

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

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

相關文章

CMOS 圖像傳感器——Color Filter Array

在介紹CMOS圖像傳感器的工作原理時候說道,像點(Sensor感光的基本單元叫做“像點”)吸收入射光后會有一定概率激發出電子,這個過程叫做光電轉換。光子激發出電子會被像點下方的電場捕獲并存儲起來備用。像點的作用可以類比成一個盛水的小桶,它可以在一定范圍內記錄其捕獲的…

我的一點企業做云經驗

最近,經常有朋友問我在企業做云的經驗,也有人問我OpenStack二次開發項目經驗。正好這方面也有點經歷,那現在就把我過往有關經歷整理整理,總結出幾條心得體會,分享給大家。 技術:我們OpenStack二次開發做了什…

CMOS圖像傳感器——黑電平校正

黑電平(black level ),也稱作Optical Black,很多人也稱呼為OB,指的是光學暗區,即黑色數據的最低電平值,指在經過一定校準的顯示裝置上,沒有一行光亮輸出的視頻信號電平,通常指圖像數據為0時對應的sensor信號電平值。 在CMOS圖像傳感器對圖像進行處理的過程中,黑電平是…

C#利用WebClient 兩種方式下載文件(一)

WebClient client new WebClient(); 第一種 string URLAddress "http://files.cnblogs.com/x4646/tree.zip"; string receivePath"C:\"; client.DownloadFile(URLAddress, receivePath System.IO.Path.GetFileName(URLAddress)); 就OK了。 第二種 Strea…

文件的行操作

1.1 第8題 輸出test.txt文件內容時,不包含clsn字符串的命令 文件內容: [rootznix ~]# cat /data/test.txt test liyao clsn 1.1.1 方法一grep 使用grep命令,找什么就寫什么 -v 參數是排除的意思 [rootznix ~]# grep -v "clsn" /dat…

linux多線程編程5--信號量(semaphore)

信號量本質上是一個非負的整數計數器,也是UNIX中古老的實現進程互斥和同步的手段,Linux下信號量概念是在線程中,信號則在進程控制中,不過原理差不多,最基本最經典的操作莫過于P、V操作了,能實現進程、線程的…

【leetcode】910. Smallest Range II

題目如下: 解題思路:我的思路是先找出最大值。對于數組中任意一個元素A[i]來說,如果A[i] K 是B中的最大值,那么意味著從A[i1]開始的元素都要減去K,即如果有A[i] K > A[-1] - K,那么A[i] K 就可以作為…

CMOS圖像傳感器架構的演變

01、 引言 圖像傳感器目前用于多種應用。自 1969 年電荷耦合器件 (CCD) 發明以來,固態圖像傳感器已蔓延到各種消費市場,例如小型攝像機和數碼相機。自 2005年以來已成為主流固態圖像傳感器的 CMOS 圖像傳感器在為 CCD 開發的技術的基礎上不斷發展。除了…

Linux系統中/dev/mtd與/dev/mtdblock的區別

MTD(memory technology device內存技術設備)是用于訪問memory設備(ROM、flash)的Linux的子系統。MTD的主要目的是為了使新的memory設備的驅動更加簡單,為此它在硬件和上層之間提供了一個抽象的接口。MTD的所有源代碼在/drivers/mtd子目錄下。…

Python判斷變量的數據類型的兩種方法

2019獨角獸企業重金招聘Python工程師標準>>> 1、isinstance(變量名,類型) def varargsql(self, sql, *args):if isinstance(args, tuple):self.cursor.execute(sql, args)self.conn.commit() 2、通過與其他已知類型的常量進行對比(type()&…

svn圖標的含義

http://www.cnblogs.com/genhaosan/articles/5129791.html 轉載于:https://www.cnblogs.com/wangc04/p/6400477.html

基于事件的視覺傳感器

在之前的文章里 人工智能與圖像傳感器_滄海一升的博客-CSDN博客_人工智能和傳感器的關系第一類是圖像傳感器與人工智能計算相結合,即圖像傳感器模組除了可以輸出圖像之外,還可以直接輸出人工智能算法計算的結果。另一類智能圖像傳感器則是為人工智能應用專門設計的圖像傳感器…

RocketMQ多Master多Slave模式部署

每個 Master 配置一個 Slave,有多對Master-Slave,HA采用同步雙寫方式,主備都寫成功,向應用返回成功。 優點:數據與服務都無單點,Master宕機情況下,消息無延遲,服務可用性與數據可用性…

FPGA的ip核之概念和分類

ip核之概念和分類 IP(Intellectual Property)內核模塊是一種預先設計好的甚至已經過驗證的具有某種確定功能的集成電路、器件或部件。它有幾種不同形式。IP內核模塊有行為(behavior)、結構(structure)和物理…

codeforces 1045 D. Interstellar battle

題目大意:一顆樹,給定每個點消失的概率,求出連通塊的期望值。要求支持修改消失概率的操作并且給出每次修改過后的期望值。注意被破壞的點不能算入連通塊中。 數據范圍,時限1S。 傳送門 D. Interstellar battle 我們考慮做有根樹的…

RecyclerView(滾動控件)的用法

1.首先在build.gradle中添加依賴庫 compile com.android.support:recyclerview-v7:24.2.1 2.修改activity_main.xml <LinearLayout ......<android.support.v7.widget.RecyclerViewandroid:id"id/recycler_view"android:layout_width"maych_parent"a…

Verilog中case(1‘b1)的使用說明

在用Verilog進行RTL代碼編寫的時候基本不會用到case(1‘b1)&#xff0c;而且一般的語法說明也如下&#xff1a; case(case_expr)condition1 : true_statement1 ;condition2 : true_statement2 ;……default : default_sta…

Cookie中文存儲頁面500問題

前段時間做cookie存儲&#xff0c;直接用的菜鳥教程中的cookie設置方法&#xff0c;方法如下&#xff1a; function setCookie(cname,cvalue,exdays) {var d new Date();d.setTime(d.getTime()(exdays*24*60*60*1000));var expires "expires"d.toGMTString();docum…

Behave用戶自定義數據類型

在step句子中, 所有的參數默認是string類型, 如果用戶想使用復雜的或者其他數據類型, 就需要了解以下bahave中的數據類型. behave的數據類型轉換器是在parse和cfparse中支持. parse模塊是string.format的逆函數. parse_type是基于parse的擴展, 簡化了自定義數據類型的產生. pa…