1. 程式人生 > >詳解U-boot分割槽及核心更新的實現

詳解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 2015tftpnfs

首先在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