1. 程式人生 > >u-boot 使用 jffs2 檔案系統載入核心

u-boot 使用 jffs2 檔案系統載入核心

1. 修改kernel 中的 nand.c
#define MV_NUM_OF_NAND_PARTS 7
static struct mtd_partition parts_info[] = {
    { .name = "u-boot",
      .offset = 0,
      .size = 1 * 1024 * 1024 },
    { .name = "kernel-1-jffs2",
      .offset = MTDPART_OFS_NXTBLK,
      .size = 4 * 1024 * 1024 },
    { .name = "kernel-2-jffs2",
          .offset = MTDPART_OFS_NXTBLK,

          .size = 4 * 1024 * 1024 },          
    { .name = "rootfs-1-yaffs2",
              .offset = MTDPART_OFS_NXTBLK,
              .size = 128 * 1024 * 1024 },
    { .name = "rootfs-2-yaffs2",
              .offset = MTDPART_OFS_NXTBLK,
              .size = 128 * 1024 * 1024 },    
    { .name = "CFG-yaffs2",

              .offset = MTDPART_OFS_NXTBLK,
              .size = 8 * 1024 * 1024 },              
    { .name = "Data-yaffs2",
      .offset = MTDPART_OFS_NXTBLK,
      .size = MTDPART_SIZ_FULL },
};
注意修改 num_of_parts = MV_NUM_OF_NAND_PARTS;
核心修改完畢:
分割槽資訊如下:
dev:    size   erasesize  name
mtd0: 00100000 00020000 "u-boot"
mtd1: 00400000 00020000 "kernel-1-jffs2"

mtd2: 00400000 00020000 "kernel-2-jffs2"
mtd3: 08000000 00020000 "rootfs-1-yaffs2"
mtd4: 08000000 00020000 "rootfs-2-yaffs2"
mtd5: 00800000 00020000 "CFG-yaffs2"
mtd6: 0ef00000 00020000 "Data-yaffs2"
設計說明:
兩個kernel分割槽,兩個檔案系統分割槽,方便遠端升級系統。

2. u-boot 修改部分
2.1 加入對 jffs 檔案系統的支援
#define CONFIG_CMD_JFFS2
/*JFFS2 Support */
#define CONFIG_JFFS2_CMDLINE
#define CONFIG_JFFS2_NAND 1
#define CONFIG_JFFS2_DEV "nand0"
/*JFFS2 Support */

2.2 修改u-boot中的分割槽資訊
找到 環境變數設定的地方加入
    env = getenv("flagPolicy");
        if(!env)
        setenv("flagPolicy","yes" );

    env = getenv("mtdparts");
    if( !env )
        setenv("mtdparts","mtdparts=NAND:[email protected](u-boot),4m(kernel-1),4m(kernel-2),128m(rootfs-1),128m(rootfs-2),8m(cfg),-(data)");

    env = getenv("bootflag1");
    if( !env )
        setenv("bootflag1", "chpart nand0,1;fsload $(image_name);setenv bootargs $(bootargs) root=/dev/mtdblock3 rootfstype=$(rootfstype)
             ip=$(ipaddr):$(serverip)$(bootargs_end); bootm;" );

    env = getenv("bootflag2");
    if( !env )
        setenv("bootflag2", "chpart nand0,2;fsload $(image_name);setenv bootargs $(bootargs) root=/dev/mtdblock4
             rootfstype=$(rootfstype) ip=$(ipaddr):$(serverip)$(bootargs_end); bootm;" );

mtdparts 所儲存的是分割槽資訊,最好與核心部分一致。
bootflag1和bootflag2分別為啟動指令碼。
使用chpart 切換分割槽

fsload 從對應的分割槽上載入kernel檔案。

2.3 修改 main.c 中 main_loop 函式
使系統使用自己的指令碼啟動。

2.4 啟動flag
可以拿 u-boot 所在分割槽,也就是第一個分割槽的最後2k或者4k 存放啟動標誌。
u-boot 中讀取啟動標誌,選擇不同的指令碼啟動。

3 引用程式修改啟動標誌
3.1 使用 open 函式開啟  /dev/mtd0 裝置 直接讀寫
    寫時應該注意長度必須是頁面對齊的, 最好是 2k.

4 部分升級指令碼 update.sh
4.1 使用 nfs 啟動系統
#startup by run nfsboot
#install kernel -1
/mtd-utils/usr/sbin/flash_eraseall /dev/mtd1
/bin/dd if=/uImage.jffs2 of=/dev/mtdblock1

#install fs -1
/mtd-utils/usr/sbin/flash_eraseall /dev/mtd3
/bin/mount -t yaffs2 /dev/mtdblock3 /mountpoint
tar xvf /fs.tar -C /mountpoint

4.2 設定標誌位。

相關推薦

u-boot 使用 jffs2 檔案系統載入核心

1. 修改kernel 中的 nand.c#define MV_NUM_OF_NAND_PARTS 7static struct mtd_partition parts_info[] = {    { .name = "u-boot",      .offset = 0, 

Beaglebone Black——理論篇beaglebone black啟動——從串列埠獲得SPL、U-BOOT,TFTP伺服器獲得核心,NFS伺服器掛載根檔案系統

          一般來講啟動一個系統所需的bootloader(SPL/MLO、u-boot.img)和根檔案系統(/boot下包含核心zImage)要麼是放在NAND Flash,或者是SD卡,或者是eMMC,或者是USB中,那麼還有一種方式,就是所需要的這些檔案全部

linux-2.6.21核心中建立jffs2檔案系統(mtd分割槽的使用)

本文主要介紹如何在AT91SAM9261EK板子上製作和使用jffs2檔案系統,使用的是linux-2.6.21核心。 首先配置MTD $ make menuconfig 進入 Memory Technology Devices (MTD)

Linux核心啟動及檔案系統載入過程

當u-boot開始執行bootcmd命令,就進入linux核心啟動階段 與u-boot類似,普通Linux核心的啟動過程也可以分為兩個階段,但針對壓縮了的核心如uImage就要包括核心自解壓過程了。第一階段為核心自解壓過程,第二階段主要工作是設定ARM處理器

File System, Kernel Data Structures, and Open Files(檔案系統核心資料結構,與開啟檔案)

寫在前面 本文來自 USNA(美國海軍學院)系統程式設計課的講義,現將其翻譯在此,由於沒有版權所以 謝絕任何轉載,如果你能拿到版權,當我沒說 本人英文水平較弱,有錯誤請大家幫忙指出 關於核心結構,我沒有看過最近的 Linux 系統核心,所以是否真如文章說的那

U盤只讀檔案系統

Linux下使用U盤時,在沒有解除安裝的情況下擅自拔出U盤後,U盤成為只讀檔案系統,說下修復的辦法。 環境: OS: Linux 3.9.4-1-ARCH U盤:FAT32 今天向U盤上拷了檔案後,沒有解除安裝就拔了U盤,再插上電腦,稍等片刻時,發現成為只讀檔案系統。嘗試使用sudo chmod a+w

三行命令教你解決linux系統U盤只讀檔案系統問題

Ubuntu插入U盤為只讀檔案系統,無法新建檔案,資料夾或者向U盤中複製檔案 1.問題: 使用linux不管是centos還是ubuntu的小夥伴都難免遇到插入U盤的時候,不能對U盤進行操作。提示許可權不足或者是隻讀檔案系統。 現在教你三行命令教你解決U盤

u-boot.lds檔案詮釋

u-boot.lds檔案詮釋 網上大部分u-boot.lds檔案的分析大部分都是千遍一律,例如下面就是本人在網上找到的關於u-boot.lds的資料。 OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-litt

移植好uboot和基於initramfs根檔案系統Linux核心的開發板的啟動過程

我們移植好uboot和Linux核心之後,當我們重啟之後,開發板首先做的事情就是將nandflash前4K的內容複製到SRAM中去,由於SRAM只有4K大小,所以我們必須將初始化CPU、記憶體、中斷、關閉開門狗以及nandflash中uboot拷貝到SDRAM中的的程式都放

核心、裝置、驅動、檔案系統核心空間、使用者空間

學習驅動過程中有一些疑問,記錄下來,並希望能在2015-6-30之前能夠有一個明確的答案。 疑問: 一、當裝置插上的時候,核心怎麼發現裝置並更新/sys、/dev、/proc檔案系統、怎麼通知給使用者空間?更具體一點是probe的過程 二、device和driver怎麼配對

U-boot 開始檔案Start.s的異常向量表CONFIG_SPL_BUILD巨集及VBAR地址對映

#include <asm-offsets.h>          /* 標頭檔案在根目錄下的include及根 #include <config.h>           &

jffs2檔案系統製作

U-Boot 2010.09-00000-g1a87d59 (Jun 01 2011 - 21:21:30) Modified by guowenxue for s3c2440/s3c2410 board. DRAM:  64 MiB Flash: 1 MiB NAND:  256 MiB In:    se

u-boot.lds檔案詳解

網上大部分u-boot.lds檔案的分析大部分都是千遍一律,例如下面就是本人在網上找到的關於u-boot.lds的資料。 OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")

linux根檔案系統核心合二為一

《ARM Linux開發-warewin 2G/3G無線傳輸(DTU)和路由器—筆記》 硬體平臺 :AT91SAM9260 核心版本:Linux-2.6.36 核心檔案和根檔案系統在Flash中一起壓縮放置可節省大量的Flash儲存空間,也便於韌體的存檔和升級,把根檔案系

u-boot.lds檔案分析

u-boot.lds決定了u-boot可執行映像的連線方式,以及各個段的裝載地址(裝載域)和執行地址(執行域)。 GNU官方網站上對.lds檔案形式的完整描述: SECTIONS{ ... secname start BLOCK(align) (NOLOAD) : A

“轉”使用UBOOT燒寫根檔案系統核心的方法

①此處param區存放著uboot傳遞給kernel的標記列表,(是uboot傳遞給核心的,核心去讀取),和nandflash上的param儲存區(是uboot自己的)的內容不一樣 nandflash的param儲存區存放的是如 bootargs=console=ttySAC0 noinitrd root=/

openwrt檢查需要掛載的u盤的檔案系統

1. 第一種方式使用mount命令 先將u盤掛載 mount /dev/sda1 /mnt 然後使用mount命令,輸出如下: rootfs on / type rootfs (rw) /dev/root on /rom type squashfs (ro,relatim

在Linux PC上掛載JFFS2檔案系統

Mounting JFFS2 Images on a Linux PC It is possible to mount a binary JFFS2 image on a Linux PC without a flash device. This ca

Linux虛擬檔案系統核心初始化)

這部分主要對linux虛擬檔案系統核心初始化部分做些補充。 關於shrinker,inode和dentry cache初始化階段都需要註冊自己的shrinker,用於縮減cache。兩個操作原理類似。 shrinker資料結構介紹 /* * A callback you

jffs2檔案系統製作(適用於spi nor flash)

mkfs.jffs2: Usage: mkfs.jffs2 [OPTIONS] Make a JFFS2 file system image from an existing directory tree Options: -p, --pad[=SIZE]       用16進位制來表示所要輸出檔案的大小,也