ZYNQ开机挂载SPI FLASH中的jffs2文件系统
目錄
- 寫在前面
- Vivado工程建立
- petalinux工程建立
- 下載程序,開機測試
- 沒成功的話看這里
寫在前面
??做類嵌入式開發很久了,從51到STM32,Arduino,ESP8266,ESP32,樹莓派,ZYNQ,做了很多小項目,雖然根本沒有牛到有資格寫博客,但也是記錄下自己的工作給以后做一個備忘吧。
??本文記錄的是一個以太網轉同步串口的活,導師給了一塊7z030的板子,讓在這上面做,這塊板子的以太網居然是航空接插件接口,而且供電也得找電源,太麻煩了我還是用手里的7z010的黑金開發板吧,PS部分都一樣完成之后再移植就是了。
??文章中有大量部分參考了黑金的教程,本來不打算寫重復的部分,但考慮到也許會有比我基礎更差的同學需要學習,就把自己的工程建立流程分享出來。
Vivado工程建立
??這里選擇與黑金相同的版本2017.4,需要有配套的Ubuntu,petalinux以及linux-xilinx版本。
??選擇自己的芯片,這里本來貼了很多建立工程的詳細過程,圖太多了就刪掉了。
??建立一個block design
??添加IP核ZYNQ7 PS。
??雙擊IP核進行配置,先在PS-PL Configuration里面取消m axi GP0,圖片里的標注有問題,應該默認勾選的是m。
??之后進行IO的配置,從FLASH里啟動Linux以及掛載jffs2文件系統,所以spi flash需要勾選,以太網透傳,以太網0也需要勾選,注意選上下面的MDIO。還需要選上UART1作為系統控制臺。所有的IO要根據自己的硬件來選擇。
??在下面還有以太網的復位管腳,這里要根據原理圖,連上了的話就需要勾選。
??在MIO Configuration里調整以太網的IO速度為fast。
??選擇相近的DDR型號。
??確認調整后點擊run block automation引出IO,我這里截的圖沒有取消勾選m axi gp0,如果取消了的話沒有左邊這部分。
??切換到sources選項卡,右鍵選擇create hdl wrapper。
??生成bit文件。
??將硬件信息導出。
??如果大家有PL部分需要勾選包含bit文件。
petalinux工程建立
??把剛才建立工程目錄下的sdk文件夾復制到Linux主機。
??首先配置環境,這里應該要根據大家的安裝位置來,Linux真的不熟。
??使用petalinux建立新的工程
??進入工程目錄。
??根據硬件信息建立工程,這里路徑要正確,sdk文件夾在工程的上層目錄中。
petalinux-config --get-hw-description ../7z010_jffs2.sdk/
??之后會彈出config界面,這個界面可以通過petalinux-config命令重復進入。因為學校環境沒有網絡,需要更改Linux Components Selection為本地內核文件,如果使用的是有外網環境的Linux主機,這里可以使用默認配置從git上面下載Linux內核。
??需要調整flash配置,我們需要預留一部分flash空間作為系統“硬盤”。在Sbusystem AUTO Hardware Settings -> Flash Settings。具體的size大家可以自己測試一下,這里的數字應該是扇區大小,spi flash在大學時研究過現在記不清也懶得看了,size過大會在erase為jffs2文件系統時破壞掉系統。這里的大小是測試出來的,能用就沒研究了。這里我們并不需要將文件系統修改為jffs2,這個設置不知道對應的教程在哪里,直接配置成jffs2系統后我無法開機進入Linux系統了,不知道該如何解決,官方應該有教程吧,又找到的同學可以提供一下。
??配置Linux內核,如果不需要加入額外驅動這里就不需要修改,直接保存退出就OK。
??拷貝黑金提供的startup文件夾到工程目錄下。
??修改project-spec/meta-user/recipes-core/images/petalinux-image.bbappend文件,在最后加入一行
??我們需要修改一下7z010_jffs2/project-spec/meta-user/recipes-apps/startup/files下的startup.sh文件,這個文件就是開機后會執行的命令。黑金提供的內容是開機后自動掛載SD卡的第一分區到/sd文件夾下。這里我們修改為開機后掛載flash的mtd4,這個mtd4就是上面配置flash的第四分區jffs2。判斷里面的-f路徑寫錯了,就當沒看見吧,這句不關鍵。。
??回到petalinux工程的命令行,配置根文件系統。
??在apps中選擇startup,按下‘y’鍵。保存退出。
??編譯工程
??這里需要的時間比較久了。
??生成BOOT文件,因為只有flash啟動,所以一切包括內核都要打包到BOOT中,因為我這里還沒有PL部分,所以命令沒有–fpga,PL部分有工程的同學記得加上–fpga
??至此就完成了工程的建立。
下載程序,開機測試
??我使用Vivado進行boot文件的燒寫,打開硬件管理器,自動連接。
??在PL部分右鍵選擇add configuration memory device,選擇你用的flash型號。
??添加生成的boot.bin文件,在工程目錄的7z010_jffs2/images/linux/下,添加FSBL elf文件,說實話這個文件的作用不太清楚是什么,猜測是根據flash的分區寫入boot文件?那么是否修改了flash的前幾個分區后需要使用不同的elf文件呢?沒有測試過。
??完成后上電進入系統,插上串口線查看控制臺信息,由于我是邊嘗試邊記錄,不能保證這一套操作之后可以實現描述的功能。我這里目前已經成功了,掛載mtdblock4之后在/home/root/flash下vi一個文件,reboot或者斷電再開機后這個分區都能正確掛載,并且vi的文件內容正常。
沒成功的話看這里
??寫的第一個版本把flash_eraseall語句也放到startup.sh里面了,開機時控制臺輸出擦除信息立刻就反應過來,每次開機都擦除那我的文件不是都沒了。。修改后直接掛載就可以正確掛載成功了,但是我認為沒有進行eraseall的分區是不能正確作為jffs2文件系統掛載的(猜測,懶得試了。。)。所以沒有掛載成功的同學可以在開機進入petalinux后輸入
cat /proc/mtd先看一下flash的分區是否和自己在petalinux-config里面配置的一樣,一樣的話可以直接把mtd4格式化為jffs2。
flash_eraseall -j /dev/mtd4大家可以輸入
flash_eraseall --help查看一下信息,上面的-j就是format the device for jffs2,這也是為什么我猜測必須先eraseall一下,畢竟Windows也需要先按文件系統格式化不是?
已經存在jffs2系統的flash在重新分區為其他大小時,可以在下載boot.bin文件是選擇全盤。
貼兩個需要的文件,elf和startup
https://download.csdn.net/download/fadepurple/11196759
https://download.csdn.net/download/fadepurple/11196765
總結
以上是生活随笔為你收集整理的ZYNQ开机挂载SPI FLASH中的jffs2文件系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android-App-启动优化全记录,
- 下一篇: 如何将大白菜制作的U盘pe工具恢复为系统