1. 程式人生 > >Zynq-Linux移植學習筆記之三-ramdisk

Zynq-Linux移植學習筆記之三-ramdisk

下面用一張圖簡單介紹一下ramfs的產生過程:


如上圖所示,收集到的一些嵌入式相關的原始碼以及package經過PC上的GCC,binutis等工具編譯後得到gcc編譯器,ld,obj,庫等,注意這裡編譯得到的就是嵌入linux的相應編譯工具,它們共同組成嵌入式編譯環境的Toolchain。舉個例子來說,PC上的gcc是基於X86的,而編譯得到的gcc就是基於arm的了。

接下來使用編譯得到的toolchain對package進行編譯得到target,packets等,再加上原來的庫,一齊打包放進資料夾中。該資料夾按照核心中的形式進行組織,包含bin dev etc lib proc sbin sys usr mnt tmp var等相應內容。使用scripts/gen

_initramfs_list.sh指令碼對該folder進行處理建立cpio格式的initramfs檔案(具體又分為先建立list,再使用gen_init_cpio建立得到cpio),最後通過gzip進行壓縮得到initramfs.cpio.gz,該檔案就是ramfs壓縮格式。將該檔案編譯進kernel後能得到vmlinux.bin,將bin檔案通過tftp載入到記憶體中即可執行linux(前提u-boot已經啟動)。

不過,目前zynq並不是採用這種方式載入linux,由於採用的是ramdisk,必須要把ramdisk,uimage,devicetree下載到記憶體中,記憶體按照不同的地址進行載入。可以參看u-boot目錄下include/configs/zynq_common.h檔案第200行開始的程式碼,該段程式碼說明了需要載入的檔案,摘抄如下:

"norboot=echo Copying Linux from NOR flash to RAM... && " \
		"cp.b 0xE2100000 0x3000000 ${kernel_size} && " \
		"cp.b 0xE2600000 0x2A00000 ${devicetree_size} && " \
		"echo Copying ramdisk... && " \
		"cp.b 0xE2620000 0x2000000 ${ramdisk_size} && " \
		"bootm 0x3000000 0x2000000 0x2A00000\0" \
	"qspiboot=echo Copying Linux from QSPI flash to RAM... && " \
		"sf probe 0 0 0 && " \
		"sf read 0x3000000 0x100000 ${kernel_size} && " \
		"sf read 0x2A00000 0x600000 ${devicetree_size} && " \
		"echo Copying ramdisk... && " \
		"sf read 0x2000000 0x620000 ${ramdisk_size} && " \
		"bootm 0x3000000 0x2000000 0x2A00000\0" \
	"uenvboot=" \
		"if run loadbootenv; then " \
			"echo Loaded environment from ${bootenv}; " \
			"run importbootenv; " \
		"fi; " \
		"if test -n $uenvcmd; then " \
			"echo Running uenvcmd ...; " \
			"run uenvcmd; " \
		"fi\0" \
	"sdboot=if mmcinfo; then " \
			"run uenvboot; " \
			"echo Copying Linux from SD to RAM... && " \
			"fatload mmc 0 0x3000000 ${kernel_image} && " \
			"fatload mmc 0 0x2A00000 ${devicetree_image} && " \
			"fatload mmc 0 0x2000000 ${ramdisk_image} && " \
			"bootm 0x3000000 0x2000000 0x2A00000; " \
		"fi\0" \
	"usbboot=if usb start; then " \
			"run uenvboot; " \
			"echo Copying Linux from USB to RAM... && " \
			"fatload usb 0 0x3000000 ${kernel_image} && " \
			"fatload usb 0 0x2A00000 ${devicetree_image} && " \
			"fatload usb 0 0x2000000 ${ramdisk_image} && " \
			"bootm 0x3000000 0x2000000 0x2A00000; " \
		"fi\0" \
	"nandboot=echo Copying Linux from NAND flash to RAM... && " \
		"nand read 0x3000000 0x100000 ${kernel_size} && " \
		"nand read 0x2A00000 0x600000 ${devicetree_size} && " \
		"echo Copying ramdisk... && " \
		"nand read 0x2000000 0x620000 ${ramdisk_size} && " \
		"bootm 0x3000000 0x2000000 0x2A00000\0" \
	"jtagboot=echo TFTPing Linux to RAM... && " \
		"tftpboot 0x3000000 ${kernel_image} && " \
		"tftpboot 0x2A00000 ${devicetree_image} && " \
		"tftpboot 0x2000000 ${ramdisk_image} && " \
		"bootm 0x3000000 0x2000000 0x2A00000\0" \

從程式碼中可以看到,都是載入kernel image(對應uImage),devicetree image(對應devicetree.dtb),ramdisk_image(對應ramdisk)。將這三者配合好按照不同的啟動方式放入記憶體相應的地址即可完成載入。

相關推薦

Zynq-Linux移植學習筆記-ramdisk

下面用一張圖簡單介紹一下ramfs的產生過程: 如上圖所示,收集到的一些嵌入式相關的原始碼以及package經過PC上的GCC,binutis等工具編譯後得到gcc編譯器,ld,obj,庫等,注意這裡編譯得到的就是嵌入linux的相應編譯工具,它們共同組成嵌入式編譯環

Zynq-Linux移植學習筆記27UIO機制響應外部中斷實現【轉】

轉自:https://blog.csdn.net/zhaoxinfan/article/details/80285150 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/jj12345jj198999/article/details/802851501、&n

Zynq-Linux移植學習筆記31-使用者自定義I2C驅動

1、背景介紹 板子上通過ZYNQ的I2C-0控制器連線了三片DBF晶片和一片Ti的226測功耗晶片,示意圖如下: 如上圖所示,三塊DBF晶片的I2C地址分別為2,4,8,Ti 226晶片的I2C地址為0x40.現在需要ZYNQ通過I2C匯流排讀寫這四塊晶片的暫存器數值

Zynq-Linux移植學習筆記33-CMA連續實體記憶體配置

1、背景介紹 在使用pcie進行資料傳輸時,常常需要用到dma,由於dma傳輸多為非同步傳輸方式,只需要告訴dma起始地址,資料大小,然後啟動dma,cpu就可以去做其他事情。不過Dma傳輸需要有一個前提條件,分配一段連續的實體記憶體,在linux下,由於存在虛實實體地址轉

轉發:Zynq-Linux移植學習筆記六-netperf網路測試

1、netperf安裝 目前linux下主流的網路測試工具是netperf,完全可以在zc706上執行的linux內加入netperf網路測試工具,然後用網線與電腦相連進行測試。 netperf下載地址:netperf下載地址 Client端安裝 下載結束後,進行安裝:

Zynq Linux移植學習筆記四 fsbl

                這一篇講一講FSBL1、  FSBL簡介在zynq上執行程式的時候,載入過程中肯定需要用到一個檔案,那就是fsbl,fsbl的全稱為first stage boot loader,從字面上就能夠看出這是zynq啟動第一階段的載入程式,經過了fsbl這一階段,後面系統才能夠執行裸

Zynq-Linux移植學習筆記十-u-boot網路配置

在zynq開發板zc706上,網路通路由下面三個裝置組成: 其中zynq負責對phy進行配置,當zynq上的網路控制器以及phy完成正確配置時,能夠看到RJ45上面的黃燈亮,此時表明鏈路已經通了。如果u-boot中已經設定了IP地址,通過網線就可以ping通

Zynq-Linux移植學習筆記14-RapidIO驅動開發

在對zynq進行linux驅動開發時,除了需要針對zynq內ARM自帶的控制器適配驅動外,還需要對zynq PL部分的IP核進行驅動開發。對於ARM來說,zynq PL部分的IP核就是一段地址空間,這段地址空間包含了該IP的一系列暫存器,ARM操作該IP核的暫存器也就是

Zynq-Linux移植學習筆記13-i2c驅動配置

1、 背景介紹 板子上通過I2C匯流排與zynq相連的是三片1848 如上圖所示,zynq通過I2C匯流排與3片CPS-1848交換晶片相連,3片1848晶片的I2C地址分別為2,4,8. 目前zynq上linux I2C驅動採用的是i2c-cadence(driver

Zynq-Linux移植學習筆記16-Zynqlinux XADC驅動

1、  簡介 XADC是zynq晶片內部進行溫度和電壓檢測的模組,通過(Xilinx Wiki - xadc.html)這篇wiki可以知道,XADC控制器有兩種表現形式,一種是位於PS內部,即文件中提到的the PS-XADC interface for the PS s

Zynq-Linux移植學習筆記21-Linux啟動時自動以root賬號登入

在除錯zynq開發板時,linux啟動後總是需要手動輸入root以登入系統,如下圖所示: 這對於自動執行應用程式來說很不方便。現在可以通過修改ramdisk的相關內容實現root賬號自動登入。 1、建立可執行檔案 首先需要建立可執行檔案,用對應板子的CROSS COM

Zynq-Linux移植學習筆記八-linux網路驅動

這一篇詳細介紹一下zynq下linux核心中網路驅動的執行過程。 1、基本層次 在linux中,網路可以分為下面三個層次: Linux網路驅動涉及到後面兩層,網路協議層中需要了解skb和netif;硬體驅動層也就是mac層,需要了解dma和dec。 按內容來說,整個網路

Zynq-Linux移植學習筆記四-fsbl

這一篇講一講FSBL 1、  FSBL簡介 在zynq上執行程式的時候,載入過程中肯定需要用到一個檔案,那就是fsbl,fsbl的全稱為first stage boot loader,從字面上就能夠看出這是zynq啟動第一階段的載入程式,經過了fsbl這一階段,後面系統

Zynq-Linux移植學習筆記九-petalinux

在對zynq上進行linux作業系統移植時,除了使用傳統的由使用者編譯u-boot,kernel,rootfs方法外,目前主流採用vivado+petalinux操作方式。該操作方式能夠快速生成適配於zynq的linux映象,下文中進行詳細介紹。 一、硬體設計 參考ug9

Linux netfilter 學習筆記 ip層netfilter的table、rule、match、target結構分析

基於linux2.6.21 上一節分析了ip層hook回撥函式的註冊以及呼叫流程,本節我們就開始分析每一個模組的具體實現。 工欲善其事必先利其器,一個功能模組的程式碼實現與其資料結構的設計有很大的關

Linux 路由 學習筆記 路由查詢流程分析

上一節分析了路由的新增,本節接著分析路由的查詢流程,路由查詢流程也是被最多使用的介面。當裝置三層協議棧接收到資料包、傳送資料包等操作時,都要進行路由查詢操作。 對於路由的查詢,又分為兩個查詢過程,即不支援策略路由時的路由查詢函式,以及支援策略路由時的路由查詢流程,顯然支

Linux學習筆記————Linux命令概述

上下 eight ive 幫助 option pos misc tor tro 一、引言 很多人可能在電視或電影中看到過類似的場景,黑客面對一個黑色的屏幕,上面飄著密密麻麻的字符,梆梆一頓敲,就完成了竊取資料的任務。 Linux 剛出世時沒有什麽圖形界面,所有的操

Linux運維學習筆記十一:監控利器Nagios實戰

第四十二章 監控利器Nagios實戰一、Nagios介紹1、哪些內容需要監控呢?(1)本地資源a、負載:uptime;b、CPU:top,sar,cpu溫度;c、磁碟:df;d、記憶體:free;e、IO:iostat;f、RAIDg、passwd檔案的變化(本地所有檔案指紋

Linux運維學習筆記十二: 防火牆實戰

第四十三章 防火牆實戰一、Iptables基礎概念1、一般使用情況(1)seLinux關閉(生產系統也是關閉的)(2)使用硬體ids(入侵檢測)(3)iptables在生產環境中一般是內閘道器閉,外網開啟。在大併發的情況下,不能開iptables,影響效能,這時可以使用硬體防

Linux IGMP SNOOPING 學習筆記 igmp snooping實現需求分析

 本文主要是總結分析,在前面兩節中,我們根據linux2.6.32中實現的igmp snooping程式碼,分析了igmp snooping的流程。 本節在前兩節的基礎上分析實現igmp snooping所需要的功能 一、資料結構      對於實現一個子層功能,最主要的