詳解U-boot分割槽及核心更新的實現
U-boot分割槽及核心更新的實現
一 問題提出1) 在沒有網路的環境下可以使用U盤等儲存介質來更新核心
2) 可以通過網路遠端更新核心
3) 支援U-Boot對nor falsh ,nand flash的分割槽
4) U-Boot下對JFFS2檔案系統的支援。
二 問題解決
通過實現U-boot使用JFFS2檔案系統載入核心的方法解決上述核心更新及分割槽問題
三 問題實現(u-boot-2009.01)
新增對JFFS2檔案系統支援的巨集定義
./include/configs/ads5121.h
#define CONFIG_CMD_JFFS2
#define CONFIG_JFFS2_CMDLINE
#define CONFIG_JFFS2_NAND
//定義預設的分割槽資訊(最好和核心定義的MTD分割槽資訊一致)
#define MTDIDS_DEFAULT "nor0=ads5121-flash,nand0=ads5121-nand"
#define MTDPARTS_DEFAULT "mtdparts=ads5121-flash:256k(protected)," \
"59904k(filesystem)," \
"4m(kernel)," \
"256k(device-tree)," \
"1m(u-boot);" \
"ads5121-nand:128m(jffs2)," \
"-(data)"
四 U-Boot分割槽及更新操作步驟
CPU: MPC5121e rev. 2.0, Core e300c4 at 400 MHz, CSB at 200 MHz
Board: ADS5121 rev. 0x0400 (CPLD rev. 0x06)
I2C: ready
DRAM: 512 MB
FLASH: 64 MB
NAND: 1024 MiB
PCI: Bus Dev VenId DevId Class Int
Net: FEC ETHERNET
IDE: Bus 0: not available
Type "run flash_nfs" to mount root filesystem over NFS
Hit any key to stop autoboot: 0
1 分割槽操作
1)手動設定分割槽資訊
setenv mtdids nand0=ads5121-nand
setenv mtdparts mtdparts=ads5121-nand:128m(jffs2 filesystem),4m(kernel),1m(device tree),-(data)
=> mtdparts
no such device nor0
device nand0 <ads5121-nand>, # parts = 4
#: name size offset mask_flags
0: jffs2 filesystem 0x08000000 0x00000000 0
1: kernel 0x00400000 0x08000000 0
2: device tree 0x00100000 0x08400000 0
3: data 0x17b00000 0x08500000 0
active partition: nand0,0 - (jffs2 filesystem) 0x08000000 @ 0x00000000
defaults:
mtdids : nor0=ads5121-flash,nand0=ads5121-nand
mtdparts: mtdparts=ads5121-flash:256k(protected),59904k(filesystem),4m(kernel),256k(device-tree),1m(u-boot);ads5121-nand:128m(jffs2),-(data)
2)設定預設的分割槽資訊
=> mtdparts default
=> mtdparts
device nor0 <ads5121-flash>, # parts = 5
#: name size offset mask_flags
0: protected 0x00040000 0x00000000 0
1: filesystem 0x03a80000 0x00040000 0
2: kernel 0x00400000 0x03ac0000 0
3: device-tree 0x00040000 0x03ec0000 0
4: u-boot 0x00100000 0x03f00000 0
device nand0 <ads5121-nand>, # parts = 2
#: name size offset mask_flags
0: jffs2 0x08000000 0x00000000 0
1: data 0x18000000 0x08000000 0
active partition: nor0,0 - (protected) 0x00040000 @ 0x00000000
defaults:
mtdids : nor0=ads5121-flash,nand0=ads5121-nand
mtdparts: mtdparts=ads5121-flash:256k(protected),59904k(filesystem),4m(kernel),256k(device-tree),1m(u-boot);ads5121-nand:128m(jffs2),-(data)
=>
3)刪除分割槽:
=> mtd del nand0,1
=> mtdparts
device nor0 <ads5121-flash>, # parts = 5
#: name size offset mask_flags
0: protected 0x00040000 0x00000000 0
1: filesystem 0x03a80000 0x00040000 0
2: kernel 0x00400000 0x03ac0000 0
3: device-tree 0x00040000 0x03ec0000 0
4: u-boot 0x00100000 0x03f00000 0
device nand0 <ads5121-nand>, # parts = 1
#: name size offset mask_flags
0: jffs2 0x08000000 0x00000000 0
active partition: nor0,0 - (protected) 0x00040000 @ 0x00000000
defaults:
mtdids : nor0=ads5121-flash,nand0=ads5121-nand
mtdparts: mtdparts=ads5121-flash:256k(protected),59904k(filesystem),4m(kernel),256k(device-tree),1m(u-boot);ads5121-nand:128m(jffs2),-(data)
=>
4)新增一個分割槽
=> mtdparts add nand0 [email protected] data
=> mtdparts
device nor0 <ads5121-flash>, # parts = 5
#: name size offset mask_flags
0: protected 0x00040000 0x00000000 0
1: filesystem 0x03a80000 0x00040000 0
2: kernel 0x00400000 0x03ac0000 0
3: device-tree 0x00040000 0x03ec0000 0
4: u-boot 0x00100000 0x03f00000 0
device nand0 <ads5121-nand>, # parts = 2
#: name size offset mask_flags
0: jffs2 0x08000000 0x00000000 0
1: data 0x18000000 0x08000000 0
active partition: nor0,0 - (protected) 0x00040000 @ 0x00000000
defaults:
mtdids : nor0=ads5121-flash,nand0=ads5121-nand
mtdparts: mtdparts=ads5121-flash:256k(protected),59904k(filesystem),4m(kernel),256k(device-tree),1m(u-boot);ads5121-nand:128m(jffs2),-(data)
=>
5)修改當前活動分割槽(如果要操作某個分割槽,就需要將其修改為當前的活動分割槽)
=> chpart nand0,0
partition changed to nand0,0
=> mtdparts
device nor0 <ads5121-flash>, # parts = 5
#: name size offset mask_flags
0: protected 0x00040000 0x00000000 0
1: filesystem 0x03a80000 0x00040000 0
2: kernel 0x00400000 0x03ac0000 0
3: device-tree 0x00040000 0x03ec0000 0
4: u-boot 0x00100000 0x03f00000 0
device nand0 <ads5121-nand>, # parts = 2
#: name size offset mask_flags
0: jffs2 0x08000000 0x00000000 0
1: data 0x18000000 0x08000000 0
active partition: nand0,0 - (jffs2) 0x08000000 @ 0x00000000
defaults:
mtdids : nor0=ads5121-flash,nand0=ads5121-nand
mtdparts: mtdparts=ads5121-flash:256k(protected),59904k(filesystem),4m(kernel),256k(device-tree),1m(u-boot);ads5121-nand:128m(jffs2),-(data)
=>
2 更新核心
1)下載新核心到根檔案系統
Linux核心將NAND Flash設定了2個分割槽作為MTD裝置:
[[email protected] /]# cat /proc/mtd
dev: size erasesize name
mtd0: 08000000 00020000 "nand0,128M"
mtd1: 38000000 00020000 "nand0,896M"
分割槽0:128M,分割槽1:896M, 分割槽0是用作存放jffs2等檔案系統,分割槽1作為其他儲存用途。我們可以通過網路或者U盤等方法將需要更新的核心下載到linux的根檔案系統中:
[[email protected] /]# ll
drwxr-xr-x 2 root root 0 Oct 23 09:14 Settings
drwxr-xr-x 2 root root 0 Nov 25 08:56 bin
drwxr-xr-x 2 root root 0 Oct 23 08:07 boot
drwxr-xr-x 9 root root 12720 Nov 26 13:41 dev
drwxr-xr-x 8 root root 0 Nov 26 13:38 etc
drwxr-xr-x 4 root root 0 Oct 26 10:03 home
drwxr-xr-x 4 root root 0 Oct 23 08:07 lib
lrwxrwxrwx 1 root root 11 Nov 25 08:56 linuxrc -> bin/busybox
drwxr-xr-x 7 root root 0 Oct 23 08:07 mnt
drwxr-xr-x 3 root root 0 Oct 23 08:07 opt
dr-xr-xr-x 37 root root 0 Jan 1 1970 proc
drwxr-xr-x 2 root root 0 Oct 23 08:07 root
drwxr-xr-x 2 root root 0 Nov 25 08:56 sbin
drwxr-xr-x 11 root root 0 Jan 1 1970 sys
drwxr-xr-x 2 root root 4096 Jan 1 1970 tmp
-rwxrwxrwx 1 root root 1702205 Nov 17 02:43 uImage_ori
-rwxr-xr-x 1 root root 1644439 Nov 26 13:41 uImage_update
drwxr-xr-x 11 root root 0 Nov 13 06:23 usr
drwxr-xr-x 11 root root 220 Oct 23 08:07 var
[[email protected] /]#
例如我們要更新才新核心檔案為:uImage_update
2)設定啟用分割槽
進入到U-Boot:
U-Boot 2009.03 (11月 25 2009 - 21:22:45) MPC512X
CPU: MPC5121e rev. 2.0, Core e300c4 at 400 MHz, CSB at 200 MHz
Board: ADS5121 rev. 0x0400 (CPLD rev. 0x06)
I2C: ready
DRAM: 512 MB
FLASH: 64 MB
NAND: 1024 MiB
PCI: Bus Dev VenId DevId Class Int
Net: FEC ETHERNET
IDE: Bus 0: not available
Type "run flash_nfs" to mount root filesystem over NFS
Hit any key to stop autoboot: 0
=> mtdparts default
=> mtdparts
device nor0 <ads5121-flash>, # parts = 5
#: name size offset mask_flags
0: protected 0x00040000 0x00000000 0
1: filesystem 0x03a80000 0x00040000 0
2: kernel 0x00400000 0x03ac0000 0
3: device-tree 0x00040000 0x03ec0000 0
4: u-boot 0x00100000 0x03f00000 0
(注意我們的NAND Flash分割槽和核心的MTD分割槽是保持一致的。)
device nand0 <ads5121-nand>, # parts = 2
#: name size offset mask_flags
0: jffs2 0x08000000 0x00000000 0
1: data 0x18000000 0x08000000 0
active partition: nor0,0 - (protected) 0x00040000 @ 0x00000000
defaults:
mtdids : nor0=ads5121-flash,nand0=ads5121-nand
mtdparts: mtdparts=ads5121-flash:256k(protected),59904k(filesystem),4m(kernel),256k(device-tree),1m(u-boot);ads5121-nand:128m(jffs2),-(data)
=> ls
Scanning JFFS2 FS: done.
修改當前的活動分割槽,因為我們要操作的是nand0 的第一個分割槽(存放有根檔案系統同時包含有我們需要更新的核心uImage_update。
=> chpart nand0,0
partition changed to nand0,0
=> mtdparts
device nor0 <ads5121-flash>, # parts = 5
#: name size offset mask_flags
0: protected 0x00040000 0x00000000 0
1: filesystem 0x03a80000 0x00040000 0
2: kernel 0x00400000 0x03ac0000 0
3: device-tree 0x00040000 0x03ec0000 0
4: u-boot 0x00100000 0x03f00000 0
device nand0 <ads5121-nand>, # parts = 2
#: name size offset mask_flags
0: jffs2 0x08000000 0x00000000 0
1: data 0x18000000 0x08000000 0
active partition: nand0,0 - (jffs2) 0x08000000 @ 0x00000000
defaults:
mtdids : nor0=ads5121-flash,nand0=ads5121-nand
mtdparts: mtdparts=ads5121-flash:256k(protected),59904k(filesystem),4m(kernel),256k(device-tree),1m(u-boot);ads5121-nand:128m(jffs2),-(data)
=>
3)下載更新核心
檢視NAND Flash第一分割槽上存放的JFFS2檔案系統內容:
=> ls
Scanning JFFS2 FS: .......................... done.
drwxr-xr-x 0 Fri Oct 23 09:14:40 2009 Settings
相關推薦
詳解U-boot分割槽及核心更新的實現
U-boot分割槽及核心更新的實現 一 問題提出 1) 在沒有網路的環境下可以使用U盤等儲存介質來更新核心 2) 可以通過網路遠端更新核心 3) 支援U-Boot對nor falsh ,nand flash的分割槽 4) U-Bo
編譯U-boot和Linux核心的步驟和詳解
1、準備材料 linux核心和uboot的原始碼包—- 6818GEC.tar.gz 環境:VMware12.0 Ubuntu16.04(64位) (1)先將 6818GEC.tar.gz 放在Ubuntu的共享目錄下,然後將 68
詳解Spring Boot 配置載入順序及屬性載入順序
先給大家介紹下spring boot 配置載入順序,具體內容如下所示: 使用 Spring Boot 會涉及到各種各樣的配置,如開發、測試、線上就至少 3 套配置資訊了。Spring Boot 可以輕鬆的幫助我們使用相同的程式碼就能使開發、測試、線上環境使用不同的配置。 在 Spring B
u-boot與Linux核心視訊顯示介面引數配置及傳遞方案
http://blog.chinaunix.net/uid-20543672-id-3244213.html 分類: LINUX2012-06-15 11:48:54 一、一般視訊顯示介面初始化所需要的引數 眾所周知,顯示器顯示的是二維的,處理器將視訊資料通過顯示介面行、地傳送到顯示器,每行
詳解Spring Boot配置文件之多環境配置
多個 提高效率 橫線 文件 style ica property form blog 一. 多環境配置的好處: 1.不同環境配置可以配置不同的參數~ 2.便於部署,提高效率,減少出錯~ 二. properties多環境配置 1. 配置激活選項 spring.profile
操作系統Lab1 詳解(boot|kern/debug)
segment frame gin tabs program its 內容 AC 描述 總體 : boot kern libs tools boot asm.h bootmain.c bootasm.S asm.h 匯編頭文件 SEG_NULLASM 定義一個空段描述符 S
詳解spring boot mybatis全註解化
color 引入 自動增長 type cat OS TE myba IV 本文重點介紹spring boot mybatis 註解化的實例代碼 1、pom.xml //引入mybatis <dependency> <groupId>org
Dubbo(概念篇):Dubbo 詳解,架構演變及優缺點
架構演變 單一應用框架(ORM) 當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。 缺點:單一的系統架構,使得在開發過程中,佔用的資源越來越多,而且隨著流量的增加越來越難以維護。 垂直應用框架(MVC) 垂直應用架構解決了單一應用架
spring boot 實踐學習案例---spring boot 初學者及核心技術鞏固的最佳實踐
chapter-1-spring-boot-quickstart Spring Boot 入門、Spring Boot 配置、Web 開發、模板引擎、資料儲存、資料快取 案例更新 7 months ago
詳解301重定向及實現方法
一、什麼是301重定向 301重定向(或叫301跳轉、301轉向)是使用者或搜尋引擎蜘蛛向網站伺服器發出訪問請求時,服務返回的HTTP資料流中頭資訊(header)部分狀態碼的一種,表示本網址永久性轉移到另一個地址。其他常見的狀態碼還包括:200(表示一切正常);404(網頁不存在
u-boot 2015tftp及nfs
首先在ubuntu上面安裝tftp,明遠的ubuntu已經配置好,就不重新下載安裝了 把核心檔案及裝置樹檔案拷貝到tftp目錄 再看看nfs需要注意的地方,ubuntu裡相應的目錄要設定屬性 明遠的核心及u-boot 在開發板u-boot命令配置環境變數 3.14.52:
Tire樹(字典樹)資料結構詳解(圖解)及模板
先在這裡放模板,具體圖解回去再發 #include <map> #include <queue> #include <cstdlib> #include <cm
詳解Android Selinux 許可權及問題
由於現做的是MTK平臺,原始碼路徑基於MTK, 不過高通大同小異 說明 Android 5.0以後完全引入了 SEAndroid/SELinux 安全機制,這樣即使擁有 root 許可權或 chmod 777 ,仍然無法再JNI以上訪問核心節點。 其實在 Android 4.4 就有限制
Redis高可用詳解:持久化技術及方案選擇
本文將先說明上述幾種技術分別解決了Redis高可用的什麼問題,然後詳細介紹Redis的持久化技術,主要是RDB和AOF兩種持久化方案。在介紹RDB和AOF方案時,不僅介紹其作用及操作方法,同時還會介紹持久化實現的一些原理細節及需要注意的問題。最後,介紹在實際使用中持久化方案的
Java單元測試工具:JUnit4(三)——JUnit詳解之執行流程及常用註解
(三)執行流程及常用註解 這篇筆記記錄JUnit測試類執行時,類中方法的執行順序;以及JUnit中常用的註解。 1.JUnit的執行流程 1.1 新建測試類
詳解 Redis 應用場景及應用例項
Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。 1. MySql+Memcached架構的問題 實際MySQL是適合進行海量資料儲存的,通過Mem
詳解React生命週期及鉤子函式
父元件 import React , {Component} from 'react' import Son from './Son' class Father extends Component { constructor(props){
KConfig、Makefile詳解以及ARM平臺Linux核心的編譯
下面講解一個綜合例項,假設我們要在核心原始碼drivers目錄下為ARM體系結 構新增如下用於test driver 的樹型目錄: |--test |-- cpu | -- cpu.c |-- test.c |-- test_client.c |-- test_ioctl.c |-- test_proc.c
Redis高可用詳解:持久化技術及方案選擇 (推薦)--轉載自程式設計迷思部落格www.cnblogs.com/kismetv/p/8654978.html
一、Redis高可用概述 在介紹Redis高可用之前,先說明一下在Redis的語境中高可用的含義。 我們知道,在web伺服器中,高可用是指伺服器可以正常訪問的時間,衡量的標準是在多長時間內可以提供正常服務(99.9%、99.99%、99.999% 等等)。但是在Redis語境中,高可用的含義似乎要寬泛一些,除
U-boot配置及編譯階段流程巨集觀分析
原文地址:http://blog.csdn.net/qq_28992301/article/details/51814239 U-boot配置及編譯階段流程巨集觀分析 通過配置和編譯,我們才能從U-boot的原始碼得到可執行的程式。 本文以x210這塊板子(基於s