1. 程式人生 > >Trustzone安全核心SierraTEE將根檔案系統從虛擬盤移至sd卡方案

Trustzone安全核心SierraTEE將根檔案系統從虛擬盤移至sd卡方案

s3c6410 支援Nand Flash本地啟動Linux,包括核心,根檔案系統,bootloader均寫入在Nand Flash.這樣可以獨立執行.   很多情況下,Nand Flash的某種原因無法寫入核心和Rootfs.而使用tftp下載核心,用NFS啟動根檔案系統比較慢.s3c6410 支援 SD卡啟動,經過改造u-boot可以從SD卡引導核心,這樣而Linux 又可以從SD卡的裝載ext3根檔案系統.這樣可以製作一個完整的SD卡啟動卡.   這樣bootloader(u-boot)可以寫入SD卡,引導扇區.     bootloader的第一階段把自己裝入在記憶體高階地址看後,可以用兩種方法從SD卡裝入核心到記憶體.   一種是用fatload命令從fat分割槽裝入核心檔案到記憶體。       fatload mmc 1 address filename (上述命令表示從第一個mmc裝置裝入檔案filename到記憶體的address當中),這個需要完整的實現fat的驅動,因此很多u-boot沒有帶.     另外一種常見的做法是使用u-boot的movi 命令.     用movi 命令直接讀寫SD卡sector.但是這樣有可以與檔案系統有衝突,因此要小心分割槽.     後面就是用這個方法來實現啟動的.可以把movi讀入命令寫入bootcmd 實現自動啟動   3.核心裝入後,可以支援用ext3的格式作根檔案系統,這樣可以把SD卡一個分割槽格式化成ext3即     可以啟動 ,這樣要修改bootargs  2.Linux SD分割槽操作.
   支援這種需要2G以下,非SDHC卡,假設是一個2G SD卡,分300M給FAT,剩下全部給 EXT3格式,作根檔案系統。    bootloader寫在SD卡的引導區,不佔用分割槽空間    Linux 對SD卡的的操作,如果第一個插入的SD卡是 /dev/sda,第二個SD卡是/dev/sdb ...依次類推.    如果第一個SD卡的第一個分割槽是 /dev/sda1 ,第二個分割槽 /dev/sda2 .如果上一個卡(sda)未安全撥下,而第二次插入也會變成sdb.     所以插入卡時要小心檢測SD卡對應的裝置結點.    2.1 Linux 分割槽工具 fdisk.      fdisk 與dos下的工具同名,在操作SD分割槽,最好把分割槽檔案目錄umount掉,否則會修改分割槽失敗,也注意要把SD卡的防寫鎖開啟. 命令格式           fdisk <裝置結點> 
     這是指裝置結點/dev/sda之類,不要對/dev/sda1 之類操作.
  1. fdisk /dev/sda
  2. The number of cylinders for this disk is set to 35560.
  3. There is nothing wrong with that, but this is larger than 1024,
  4. and could in certain setups cause problems with:
  5. 1) software that runs at boot time (e.g., old versions of LILO)
  6. 2) booting and partitioning software from other OSs
  7. (e.g., DOS FDISK, OS/2 FDISK)
  8. Command (m for help): m   #<------------顯示fdisk選單
  9. Command action
  10. a toggle a bootable flag
  11. b edit bsd disklabel
  12. c toggle the dos compatibility flag
  13. d delete a partition
  14. l list known partition types
  15. m print this menu
  16. n add a new partition
  17. o create a new empty DOS partition table
  18. p print the partition table
  19. q quit without saving changes
  20. s create a new empty Sun disklabel
  21. t change a partition's system id
  22. u change display/entry units
  23. v verify the partition table
  24. w write table to disk and exit
  25. x extra functionality (experts only)
  26. Command (m for help): p #<--------------------列印分割槽表
  27. Disk /dev/sda: 2002 MB, 2002780160 bytes
  28. 11 heads, 10 sectors/track, 35560 cylinders
  29. Units = cylinders of 110 * 512 = 56320 bytes
  30. Device Boot Start End Blocks Id System
  31. /dev/sda1 2 35561 1955775+ b W95 FAT32  #原有的FAT32分割槽
接下操作,是刪除原有分割槽,並且新建兩個分割槽,一個用FAT,一個是EXT32根檔案系統
  1. Command (m for help): d #<-------------刪除一個分割槽
  2. Selected partition 1
  3. Command (m for help): n #<-------------新建一個分割槽
  4. Command action
  5. e extended
  6. p primary partition (1-4)
  7. p #<--------------選擇建立 primary 首要分割槽
  8. Partition number (1-4): 1 #<---------第一個首要分割槽
  9. First cylinder (1-35560, default 1): #<---------起始位置,直接回車用預設值
  10. Using default value 1
  11. Last cylinder or +size or +sizeM or +sizeK (1-35560, default 35560): 300M
  12. #<---- 第一個分割槽使用 300M空間
  13. Command (m for help): p
  14. Disk /dev/sda: 2002 MB, 2002780160 bytes
  15. 11 heads, 10 sectors/track, 35560 cylinders
  16. Units = cylinders of 110 * 512 = 56320 bytes
  17. Device Boot Start End Blocks Id System
  18. /dev/sda1 1 300 16495 83 Linux
  19. Command (m for help): n #<----建第二個分割槽
  20. Command action
  21. e extended
  22. p primary partition (1-4)
  23. p #<--------------選擇建立 primary 首要分割槽
  24. Partition number (1-4): 2 #<---------第二個首要分割槽
  25. First cylinder (301-35560, default 301):
  26. Using default value 301
  27. Last cylinder or +size or +sizeM or +sizeK (301-35560, default 35560):
  28. Using default value 35560 #直接回車表示預設值,即把剩下所有空間都歸入這個分割槽
  29. Command (m for help): p
  30. Disk /dev/sda: 2002 MB, 2002780160 bytes
  31. 11 heads, 10 sectors/track, 35560 cylinders
  32. Units = cylinders of 110 * 512 = 56320 bytes
  33. Device Boot Start End Blocks Id System
  34. /dev/sda1 1 300 16495 83 Linux
  35. /dev/sda2 301 35560 1939300 83 Linux
  36. Command (m for help): w #<-------將分割槽表寫入SD卡,至此才真正生效
  37. The partition table has been altered!
  38. Calling ioctl() to re-read partition table.
  39. Syncing disks.
  2.2 格式化兩個分割槽    第一個格式化成 FAT         mkfs.vfat /dev/sda1    第二個格式化 格式ext3 格式 mkfs.ext3 /dev/sda2 
  1. mkfs.vfat /dev/sda1 #<----------格式化命令
  2. mkfs.vfat 2.11 (12 Mar 2005)
  3. [[email protected] u-boot-1.1.6_hxy6410]# mkfs.ext3 /dev/sda2 #<------格式化命令
  4. mke2fs 1.39 (29-May-2006)
  5. Filesystem label=
  6. OS type: Linux
  7. Block size=4096 (log=2)
  8. Fragment size=4096 (log=2)
  9. 242880 inodes, 484825 blocks
  10. 24241 blocks (5.00%) reserved for the super user
  11. First data block=0
  12. Maximum filesystem blocks=499122176
  13. 15 block groups
  14. 32768 blocks per group, 32768 fragments per group
  15. 16192 inodes per group
  16. Superblock backups stored on blocks:
  17. 32768, 98304, 163840, 229376, 294912
  18. Writing inode tables: done
  19. Creating journal (8192 blocks): done
  20. Writing superblocks and filesystem accounting information:
  21. done
  22. This filesystem will be automatically checked every 33 mounts or
  23. 180 days, whichever comes first. Use tune2fs -c or -i to override.
   2.3 測試檔案系統是否可以用           mount -t ext3 /dev/sda2 /mnt    2.4 把根檔案系統拷入SD卡,r表示遞迴,a表示把許可權,符號連結等資訊也拷貝        cp -ra /home/hxy/rootfs/* /mnt
1.PC機上格式化SD卡   在桌面的PC機上用SD讀卡器操作SD卡:   一般情況下PC機上第一個U盤整體裝置結點是/dev/sda,第二個是 /dev/sdb,在RHEL5下它會被自動mount到/media/disk和 /media/disk_1 目錄.   U盤/dev/sdb上第一個分割槽是 /dev/sdb1,第二是/dev/sdb2 依此類推.   根檔案系統採用符號連結等特性,用FAT32是不行的,這裡直接採用標準的ext3的檔案系統.在實測時,把U盤整個做一個分割槽做ext3根檔案系統.總是出不少問題(可能步驟也不對),因此按網上推薦的,做二個分割槽,第一個分割槽採用vfat格式,第二個分割槽才採用ext3的格式. 1.1 用fdisk分割槽      執行fdisk /dev/sdb     fdisk有如下常用選項
1. 輸入 m 顯示所有命令列示。 
2. 輸入 p 顯示硬碟分割情形。 
3. 輸入 a 設定硬碟啟動區。 
4. 輸入 n 設定新的硬碟分割區。 
  4.1. 輸入 e 硬碟為[擴充套件]分割區(extend)。 
   4.2. 輸入 p 硬碟為[首要]分割區(primary)。 
5. 輸入 t 改變硬碟分割區屬性。 
6. 輸入 d 刪除硬碟分割區屬性。 
7. 輸入 q 結束不存入硬碟分割區屬性。 
8. 輸入 w 結束並寫入硬碟分割區屬性 如果以前U盤有分割槽,需要輸入d命令來依次刪除分割槽,以下執行兩次n命令建立一個 400M的FAT分割槽,以及把剩下的分割槽設為ext3,最後用w命令把結果儲存下來.

Command (m for help): n

Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1020, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1020, default 1020): +400M

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (202-1020, default 202): 
Using default value 202
Last cylinder or +size or +sizeM or +sizeK (202-1020, default 1020): 
Using default value 1020

Command (m for help): p

Disk /dev/sdb: 2041 MB, 2041577472 bytes
63 heads, 62 sectors/track, 1020 cylinders
Units = cylinders of 3906 * 512 = 1999872 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         201      392522    b  W95 FAT32
/dev/sdb2             202        1020     1599507   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 裝置或資源忙.
The kernel still uses the old table.
The new table will be used at the next reboot.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

1.2 格式化分割槽     mkfs.vfat /dev/sda1 #第一個分割槽格式化成fat32     mkfs.ext3 /dev/sda2 #第二個分割槽格式化成fat32   可以用     tune2fs -l /dev/sda2 來檢驗分割槽型別  1.3 拷貝根檔案系統   mount /dev/sda2 /mnt/sdcard #掛載SD卡   cp -ra /home/hxy/rootfs/* /mnt/sdcard #把根檔案系統拷到SD卡 2.編譯ARM Linux核心  2.1 修改核心配置   確保ext3的檔案系統支援,和SD卡驅動都被靜態編譯到核心,我使用的是Linux 2.6.29.  在核心原始碼目錄執行 make menuconfig   其中ext3在File system下.成功的配置如下.   

 <*> Ext3 journalling file system support       
    [*]   Ext3 extended attributes 
    [*]     Ext3 POSIX Access Control Lists 
    [*]     Ext3 Security Labels  
SD卡驅動支援在Device Drivers ->MMC/SD/SDIO card support 下,成功的配置如下  
 --- MMC/SD/SDIO card support                           
 [*]   MMC debugging                                    
 [ ]   Allow unsafe resume (DANGEROUS)                  
       *** MMC/SD/SDIO Card Drivers ***                 
 <*>   MMC block device driver                          
 [*]     Use bounce buffer for simple hosts             
 <*>   SDIO UART/GPS class support                      
 <*>   MMC host test driver                             
       *** MMC/SD/SDIO Host Controller Drivers ***      
 <*>   Secure Digital Host Controller Interface support 
 <*>   Samsung S3C SD/MMC Card Interface support        
  編譯核心 make zImage  2.2 在ARM-linux下的測試.    在一個已經正常啟動的ARM-LINUX下,插入SD卡.出現如下提示,表示SD卡已經安裝上
[root: /]# s3c2440-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz).                            
s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                   
s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                   
s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                   
s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                   
s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                   
s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                   
s3c2440-sdi s3c2440-sdi: running at 198kHz (requested: 197kHz).                                   
s3c2440-sdi s3c2440-sdi: running at 16875kHz (requested: 25000kHz).                               
s3c2440-sdi s3c2440-sdi: running at 16875kHz (requested: 25000kHz).                               
mmc0: new SD card at address 0002                                                                 
mmcblk0: mmc0:0002 00000 1.90 GiB                                                                
 mmcblk0: p1 p2                                                                                   
FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive! 
但是最後一句在提示FAT有不識別的IO字符集,導致第一個VFAT分割槽沒有自動建立裝置結點.用如下命令只看到mmcblk0p2的結點.(以下操作均是在開發板上進行) [root: /]# ls -l /dev/mmc*                                             
brw-rw----    1 root     root     179,   0 Sep 22 10:48 /dev/mmcblk0   
brw-rw----    1 root     root     179,   2 Sep 22 10:48 /dev/mmcblk0p2 測試ext3分割槽 mount -t ext3 /dev/mmcblk0p2 /mnt 在/mnt上可以讀寫檔案.表示ext3分割槽正常. 手動建立第一個分割槽的結點. mknod /dev/mmcblk0p1 b 179 1 測試vfat 分割槽 mount -t vfat /dev/mmcblk0p1 /mnt 在/mnt上可以讀寫檔案.表示vfat分割槽正常.如果想自動建立個裝置結點,可以修改/etc/fstat來使用這個分割槽 3.使用SD卡分割槽作為根檔案  修改LINUX啟動引數.我用的是u-boot .因此在u-boot shell用set bootargs命令來設定Linux啟動引數.  成功的啟動引數是 noinitrd root=179:2 rw console=ttySAC0 其中179和2是sd卡上ext3分割槽的主裝置和從裝置號. 用set bootargs "noinitrd root=179:2 rw console=ttySAC0 "設定後.重啟核心,即可用ext3分割槽作為根檔案系統

相關推薦

Trustzone安全核心SierraTEE檔案系統虛擬sd方案

s3c6410 支援Nand Flash本地啟動Linux,包括核心,根檔案系統,bootloader均寫入在Nand Flash.這樣可以獨立執行.   很多情況下,Nand Flash的某種原因無法寫入核心和Rootfs.而使用tftp下載核心,用NFS啟動根

Linux核心移植和檔案系統製作(詳細步驟精講)

start_kernel是所有 Linux 平臺進入系統核心初始化後的入口函式,它主要完成剩餘的與硬體平臺相關的初始化工作,在進行一系列與核心相關的初始化後,呼叫第一個使用者程序-init 程序並等待使用者程序的執行,這樣整個 Linux 核心便啟動完畢。該函式所做的具體工作有:呼叫 setup_arch

uboot中利用TFTP和NFS載入核心映象和檔案系統

origin: http://www.cnblogs.com/cjjnjust/articles/1754849.html 主機說明: 實驗板說明: MPC8349itx開發板: IP: 59.64.155.244  閘道器 59.64.155.1 開發板eth0為

關於UBOOT,LINUX核心編譯,檔案系統的15個弱智問題(轉)

(1)核心預設執行地址和載入地址在哪裡設定? (2)從FLASH什麼地址找核心和根檔案系統,UBOOT在哪裡設定? (3)啟動時UBOOT將根檔案系統和核心拷貝到RAM中何處在哪裡設定? (4)UBOOT 如何知道核心與根檔案系統的格式和大小? (5)核心啟動引數在編譯UBOOT時候哪裡指定? (6)核心

關於uboot如何找核心核心如何找檔案系統的個人見解

關於uboot如何找核心,核心如何找根檔案系統的個人見解 這幾天真算是讓這個辰漢給搞趴下了,唉。也沒有資料可以參考。一點資訊也不說,弄不弄就把Freescale的東東拿出來。而你的東東又跟原廠的不一

Linux核心映象及檔案系統製作

一、系統開發平臺介紹    本次試驗是基於九鼎創展公司嵌入式開發板x210v3, 核心處理器是ARM Cortex–A8架構的S5PV210,主頻1GHz。  PC機Linux版本:Ubuntu Kylin 14.04  核心版本:3.13 二、Linux核心配置和編譯 2

openwrt 檔案系統掛載在U

u盤掛載完成(及 mount /dev/sda /mnt )後, #mkdir /tmp/cproot #mount --bind //tmp/cproot #tar -C /tmp/cproot-cvf - . | tar -C /mnt -xvf - #sync #sy

tiny linux: 核心精簡的檔案系統製作

tiny_linux要求實現以下兩點: 精簡linux核心映象,要求在支援TCP/IP資料傳輸的情況下,核心映象和正常執行所需記憶體能夠做到儘可能的小。 採用busybox製作根檔案系統,利用kernel mode linux補丁,使得busybox執行

關於UBOOT,LINUX核心編譯,檔案系統的15個弱智問題

(1)核心預設執行地址和載入地址在哪裡設定? (2)從FLASH什麼地址找核心和根檔案系統,UBOOT在哪裡設定? (3)啟動時UBOOT將根檔案系統和核心拷貝到RAM中何處在哪裡設定? (4)UBOOT 如何知道核心與根檔案系統的格式和大小? (5)核心啟動引數在編譯UBO

uboot,核心uImage,網路檔案系統nfs的搭建(基於友善mini2440)

基於友善的mini2440的環境搭建。(通過uboot下載,採用nfs根檔案系統的方式) 連上usb轉串列埠線,電源線,USB下載線,網線一頭接電腦、一頭接開發板。 開關打到NOR,啟動, 進入NOR上的supervivi介面,按a,通過DNW下載u-boot.bin到NA

核心kernel、檔案系統rootfs如何對映到對應的nand flash

核心kernel以及根檔案系統rootfs是如何對映到對應的nand flash的地址的 【解答】核心kernel以及根檔案系統rootfs是如何對映到對應的nand flash的地址的 【某人問題 核心在啟動的過程中,是如何完成將本地的flash裝置對映成檔案系統的?

怎樣網路上核心檔案系統啟動開發板

首先在ubuntu虛擬機器上要有nfs伺服器 1.啟動開發板uboot,輸入 下面的命令 set bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.19:/work/nfs_root/tmp/fs_mini

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

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

《Linux啟動過程分析》核心掛載檔案系統

說明:本文基於Linux2.6.29核心分析;其他核心版本僅供參考。   前邊通過原始碼情景分析,看過了匯流排、裝置、驅動及其發現機制,Linux2.6核心udev裝置節點建立相關;對於檔案系統,一直望而生畏,但核心學習、這部分又不可能繞的過去。目前對VFS中使用的has

開發板通過網路載入核心、裝置樹、檔案系統

開發板要通過網路載入核心、裝置樹、檔案系統,首先要搭建好tftp和nfs服務1.搭建tftp伺服器tftp服務安裝//----虛擬機器上安裝tftp服務$ sudo dpkg   -s   tftpd-hpa   //檢查是否安裝tftp server$ sudo apt-g

移植u-boot-2011.03到S3C2440(utu2440)的方法與步驟###8. u-boot引導啟動nand flash中核心檔案系統cramfs和使用者檔案系統yaffs2支援

rivers/rtc/hctosys.c: unable to open rtc device (rtc0)uncorrectable error : <3>uncorrectable error : <3>end_request: I/O error, dev mtdblock2, 

Linux核心驅動學習(二)----檔案系統的構成 (root filesystem)

1、建立根檔案系統目錄和檔案 1.1建立目錄 1.2建立裝置檔案(命令mknod);必須建立裝置檔案---consle\null 1.3建立配置檔案---複製已有的/etc目錄下的檔案

嵌入式linux 核心檔案系統燒寫方式簡介

總體來說,嵌入式Linux核心和根檔案的引導與PC機差不多。嵌入式linux核心和根檔案系統可以存放在各種可能的儲存裝置中,一般情況下我們將核心和根檔案系統直接燒入到Flash中(包括NOR和NAND flash),這種方法的缺點是在核心和根檔案系統出現修改時我們就不得不得

移植核心學習筆記2-----修改分割槽及製作檔案系統

1、製作分割槽 (1)分析 在上節實驗中出現以下問題:無法掛載根檔案系統 在以前u-boot燒寫檔案系統時是燒寫到某個地方,以前的分割槽是下面那樣劃分的,劃分為4個分割槽,但是上面有8個分割槽 分割槽修改參考(分割槽是在程式碼裡面寫死的,u-boot怎麼設定不會影響核心

linux檔案系統核心合二為一

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