1. zynqmp 怎麼將linux系統下載到emmc
1,vivado硬體配置,要選擇EMMC代表的SD1;
2,編譯petalinux:執行petalinux-config。
(1)選擇Subsystem AUTO Hardware Setting
-> Advanced bootable images storage settings
->boot image settings;
選擇primary flash,這里是將BOOT.bin設置為從qspi flash啟動
(2)選擇Subsystem AUTO Hardware Setting
-> Advanced bootable images storage settings
->kernel image settings;
選擇primary sd,進入後我們看到這里實際就是設置image.ub的存放區域。
(3)選擇Image Packaging Configuration,設置啟動啟動文件系統所在位置;
在設置啟動方式的時候,如下兩張圖這樣設置讀取根文件系統的位置/dev/mmcblk1p2。
(4)設置你的驅動然後編譯,依次執行:petalinux-config -c kernel;petalinux-config -c rootfs;
petalinux-build;petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --force;
3,做之前先分區(把EMMC分區),先做一個SD卡啟動的petalinux文件,
petalinux系統在zynq上面啟動起來以後就進行如下分區:即是mmcblk1分為mmcblk1p1和mmcblk1p2
具體步驟如下:
(1) 把EMMC進行分區,執行命令: fdisk /dev/mmcblk1
(2)使用n命令,添加一個新的分區
Command (m for help): n
Command action
e extended
p primary partition (1-4)
選擇p,添加主分區
,(3)選擇分區號,選擇1,
Partition number (1-4): 1 // 選擇分區號
First cylinder (1-238592, default 1): Using default value 1 // 選擇分區的第一個柱面,選擇1
Last cylinder or +size or +sizeM or +sizeK (1-238592, default 238592): Using default value 238592 // 選擇最後一個柱面
注意:1-238592,first要選第一個數,last要選擇的比238592小,其中1024就是表示1M
(4)使用t命令,設置分區格式
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): b
Changed system type of partition 1 to b (Win95 FAT32)
(5)使用w命令,保存配置,必須保存配置
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table
(6)使用對應文件系統工具對分析進行格式化(只能在debian裡面才能識別命令)
mkfs.fat /dev/mmcblk1p1 設置為fat32格式
mkfs.ext4 /dev/mmcblk1p2設置為ext4格式
注意:執行完w命令然後才算分區成功,執行完mkfs命令才算格設置內存屬性成功。
以上分區完成後,可以使用p命令,顯示分區信息;也可以使用用d命令表示刪除分區
Command (m for help): p
Disk /dev/mmcblk0: 7818 MB, 7818182656 bytes
4 heads, 16 sectors/track, 238592 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 1 238592 7634936 83 Linux
(7)執行這句:mkdosfs -F 32 /dev/mmcblk0p1
當然,可以重復上述步驟,多分幾個區,用來存放不同的狀態:
FLASH要要用來存放BOOT.bin
第一個分區用來存放image.ub或者設備樹(比如uImage和devicetree.dtb)等文件;--可以設置為128MB
第二個分區用來存放用戶數據(比如可執行程序);可以設置為2048MB
第三個分區用來存放程序執行需要的庫文件(opencv的庫,qtcreator庫,相機庫,視頻編碼解碼庫等);剩餘的1個多GB
4,把系統同步到ext4裡面
先把sd卡裡面系統掛載進來 :mount /dev/mmcblk0p2 /mnt
再把剛剛弄好的系統掛進來: mount /dev/mmcblk1p2 /tmp , 然後cd /mnt
然後進入把SD卡裡面的系統同步到emmc裡面:rsync -av ./* /tmp ,時間有點久,直到結束為止。
(要是不用SD卡也可以掛載U盤,解壓,然後進行系統同步到EMMC所掛載的地方/tmp)
5,然後將BOOT.BIN和image.ub燒錄到QSPI-FLASH中
首先擦除QSPI-FLASH:flash_eraseall /dev/mtd0
存放BOOT.bin到flash : flashcp BOOT.bin /dev/mtd0
此處若是將image.ub寫入emmc的FAT分區中(不存放到flash中),先使用mount掛載eMMC的FAT分區,
然後將image.ub使用cp指令拷貝進 /mnt/mmcFat即可,也就是把uImage 拷貝到 /dev/mmcblk1p1;
進入uImage所在目錄,然後執行 cp uImage /tmp;也就是把uImage存放到了 /dev/mmcblk1p1裡面。
6,最後斷電拔出SD卡,將撥碼開關設置為flash啟動,就能看到petalinux啟動起來;
7,報錯及其解決辦法
————————————————
版權聲明:本文為CSDN博主「寒聽雪落」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangjie36/article/details/104740448/
2. 下面是 linux 系統啟動的信息,顯示 無法掛載 根文件系統,大家幫忙瞧一瞧,猜一猜 是什麼問題!謝謝
掛載文件系統不成功,從啟動信息來看,你的根文件系統是放在SD卡中
1. 先確定你的SD卡是否是好的,如果說好多台都行的話,可以先把這台出問題的SD卡插入到另外好的產品中試試看,
2. 如果這台出問題的SD卡插到其他產品中沒問題,可以再用其他可以工作的SD卡插到這台有問題的設備中,這樣基本上可以定位問題了。
3. 關於Linux內核emmc分區問題
首先你要看你用晶元型號,有的分區不是在內核里劃分的,而是用最小化系統,劃好後再將bootload,kernenl,fs燒到對應區。有的是在內核里分區,但一般是nandflash。如果你對內核很熟,可以自己添加對應分區,修改好以後載入文件系統就ok了
4. 為什麼linux從SD卡啟動要設為mmcblk0p2
啟動設為什麼取決於你sd卡的設置。
mmcblk0p2代表:
mmc(本意是MultiMedia card,sd卡就是從這個發展來的,這里代表sd設備)
blk(block,塊設備)
0(第一個塊設備,也就是第一張sd卡)
p(partition,分區)
2(第3個分區)
也就是設定第一個sd塊設備的第3個分區為啟動分區。(如果是bootloader的參數,這個代表linux內核所在分區,如果是內核啟動參數,則代表根文件系統在第3個分區,內核會從這個分區初始化文件系統)
mmcblk0p2里的0與2要根據你的具體情況來填
與之類似的有mtdblock,sda(a代表第一塊,sd設備,通常表示硬碟)等
5. 為什麼SD卡在Linux下/dev下的設備名叫mmcblk0p1
SD/MMC 卡的設備構造差不多,MMC 應該是 SD 的前身,不過 MMC 當時的設計比 SD 小一半。
所以,SD/MMC 的驅動通用,進一步的,Linux 的設備節點就延續了 MMC 的這個名字,後面的 blk 是塊設備這個英文的簡寫, mmcblk 也就是「 mmc/sd 塊設備」,0 就是這個 mmc/sd 設備的順序編號,p1 就是第一個分區。
mmc卡與sd卡的區別:
1、mmc卡和sd卡的長寬是一樣的,SD卡略厚。
2、SD卡的觸點比MMC卡多一個,是用於數字版權保護(DRM)的。
3、SD卡的側邊比MMC卡多一個防寫的開關。
(5)linuxmmcblk擴展閱讀:
SD模式
驅動模式
SD卡有兩種驅動模式:SPI模式與SDIO模式。它們所使用的介面信號是不同的。在SPI模式下,只會用到SD卡的4根信號線,即CS、DI、SCLK與DO(分別是SD卡的片選、數據輸入、時鍾與數據輸出)。
傳輸模式
SD卡共支持三種傳輸模式:SPI模式(獨立序列輸入和序列輸出),1位SD模式 (獨立指令和數據通道,獨有的傳輸格式), 4位SD模式 (使用額外的針腳以及某些重新設置的針腳。支持四位寬的並行傳輸)。
6. 關於嵌入式Linux 插入SD卡的問題
換卡
格式化為fat32
有節點就表示驅動支持了,隨便掛載到某一個空目錄下
7. 為什麼linux從SD卡啟動要設為mmcblk0p2
mmcblk代表存儲設備(當然這里僅代表你的sd卡) 0是它在你手機上的存儲設備序號 p代表分區 2是在你sd卡上的第二個分區
8. linux 用哪個函數 格式化 mmcbl
啟動設為什麼取決於你sd卡的設置。mmcblk0p2代表:mmc(本意是MultiMedia card... (如果是bootloader的參數,這個代表linux內核所在分區,如果是內核啟動參數,則