u-boot 使用 jffs2 檔案系統載入核心
#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進位制來表示所要輸出檔案的大小,也