ZYNQ Linux作業系統移植四個部分說明文檔

2020-12-16 電子發燒友

ZYNQ Linux作業系統移植四個部分說明文檔

Felven的博客 發表於 2020-12-14 14:59:02

一、組成
ZYNQ上面移植Linux作業系統包括四個部分,uboot,devicetree,kernel,ramdisk.

其中uboot類似於bios,負責對設備進行簡單的初始化,devicetree以樹的形式對zynq相連的硬體設備進行描述,kernel是加載的作業系統內核,ramdisk是作業系統啟動之後掛載的文件系統。

 

 

二、啟動過程
移植作業系統後zynq的啟動過程如下,首先加載bootrom(zynq中自帶,用戶無法修改),然後執行fsbl(這個根據硬體在sdk中創建),然後執行uboot,uboot會將kernel、devicetree和ramdisk載入ddr,跳轉到內核入口處執行,這樣linux就啟動了。

 

 

對bootrom、fsbl和uboot詳細描述如下。

 

 

三、uboot設置
uboot可以從xilinx 官方github上面下載,地址是:

通常uboot不需要升級,目前使用的版本為xilinx 2015年底發布的版本2015.4.不過針對不同的模塊uboot需要進行修改,主要修改下面幾個地方。

1、參考時鐘修改
地址位於arch/arm/cpu/armv7/zynq/clk.c

由於ZYNQ設計大多使用50M參考時鐘,需要更改參考時鐘

# define CONFIG_ZYNQ_PS_CLK_FREQ  33333333UL更改為

# define CONFIG_ZYNQ_PS_CLK_FREQ  50000000UL

2、串口配置修改
地址位於include/configs/zynq_zc70x.h

根據硬體串口情況進行配置

#define CONFIG_ZYNQ_SERIAL_UART1 使用串口1

#define CONFIG_ZYNQ_SERIAL_UART0 使用串口0

如果兩個串口都啟用,一起配置即可。

3、DDR配置修改
地址位於include/configs/zynq_zc70x.h

根據DDR實際大小地址修改配置參數

#define CONFIG_SYS_SDRAM_SIZE                  (1024 * 1024 * 1024) 1GB DDR

#define CONFIG_SYS_SDRAM_SIZE                  (512 * 1024 * 1024)  512MB DDR

4、PHY地址配置
地址位於include/configs/zynq_zc70x.h

根據硬體PHY地址進行配置,通常硬體會將PHY地址設置為0

#define CONFIG_ZYNQ_GEM_PHY_ADDR0   0

如果硬體啟用了兩個網卡,則需要設置兩個PHY的地址

#define CONFIG_ZYNQ_GEM0

#define CONFIG_ZYNQ_GEM_PHY_ADDR0   1

 
#define CONFIG_ZYNQ_GEM1

#define CONFIG_ZYNQ_GEM_PHY_ADDR1   18

5、啟動方式配置
地址位於include/configs/zynq_common.h

如果使用QSPI flash方式啟動,需要配置QSPI FLASH對應地址,如下。

"sf probe 0 0 0 && " /

                   "sf read 0x3000000 0x400000 ${kernel_size} && " /

                   "sf read 0x2A00000 0x900000 ${devicetree_size} && " /

                   "echo Copying ramdisk... && " /

                   "sf read 0x2000000 0x920000 ${ramdisk_size} && " /

                   "bootm 0x3000000 0x2000000 0x2A00000/0" /

6、IP位址配置
地址位於include/configs/zynq_common.h

#define CONFIG_IPADDR                  192.168.100.12 //uboot啟動時板子的IP位址

#define CONFIG_SERVERIP               192.168.100.6 //uboot啟動時能訪問的遠程伺服器地址,若採用TFTP加載,需要將本地電腦配置為該地址

7、啟動延遲設置
地址位於include/configs/zynq_common.h

#define CONFIG_BOOTDELAY          7 /* -1 to Disable autoboot */

Uboot默認延遲7s再從QSPI flash中加載作業系統,如果設置為-1表明禁止自動加載

8、初始化設置
地址位於net/eth.c  和 arch/arm/lib/board.c

Uboot中需要對5396進行初始化,同時使用GPIO對PHY或NOR FLASH等進行復位,可以在eth.c中增加代碼

void mygpio_init()

{    }

然後將Mygpio_init()加入到arch/arm/lib/board.c中

9、Uboot編譯
修改完成後,可以使用下列命令編譯產生uboot

進入u-boot文件夾

$ make distclean  //文件夾清理

$ make zynq_zc70x_config // 載入配置,通常使用zynq_zc70x.h文件

 

 

$ make

編譯完成後文件夾下會出現u-boot文件,將其修改為u-boot.elf

 

 

3、將dtsi,dts文件拷入linux系統下,使用dts工具製作devicetree.dtb文件

 

 

4、如果需要修改devicetree文件,可以通過dtc工具轉換為可讀文件dts

 

 

生成的1.dts可打開,裡面能看到zynq端的外設信息和啟用情況。通常需要修改網卡配置,如下,下例中phy地址為0

ethernet@e000b000 {

                            compatible = "xlnx,ps7-ethernet-1.00.a";

                            reg = ;

                            status = "okay";

                            interrupt-parent = ;

                            interrupts = ;

                            clocks = ;

                            clock-names = "ref_clk", "aper_clk";

                            #address-cells = ;

                            #size-cells = ;

                            enet-reset = ;

                            local-mac-address = [00 0a 35 00 00 00];

                            phy-mode = "rgmii";

                            phy-handle = ;

                            xlnx,eth-mode = ;

                            xlnx,has-mdio = ;

                            xlnx,ptp-enet-clock = ;

 

                            mdio {

                                     #address-cells = ;

                                     #size-cells = ;

 

                                     phy@0 {

                                               compatible = "marvell,88e1111";

                                               device_type = "ethernet-phy";

                                               reg = ;

                                               linux,phandle = ;

                                               phandle = ;

                                     };

                            };

                   };

當對dts修改完成後,再次使用dtc工具編譯產生devicetree.dtb即可

五、文件系統設置
文件系統一般隨zynq開發板發布,可以從prebuit中找到文件系統的tar文件

 

 

在文件系統中,如果需要添加用戶自定義的shell腳本或可執行程序,可以放在/usr/bin目錄下。如果要設置系統自啟動項,可以在/etc/rc5.d中增加shell腳本。

 

 

1、文件系統製作
當修改完rootfs後,可以通過下面命令製作uramdisk文件系統

$sh -c 'cd rootfs/ && find . | cpio -H newc -o' | gzip -9 > new_initramfs.cpio.gz

 $mkimage -A arm -T ramdisk -C gzip -d new_initramfs.cpio.gz uramdisk.image.gz

執行完畢將會得到uramdisk.image.gz

六、內核配置
內核可以從xilinx官方git下載,地址:

目前linux內核中已經集成了常見的驅動,驅動源碼位於drivers文件夾下。針對內核的修改位於 arch/arm/configs/xilinx_zynq_defconfig文件中,該文件中定義了內核所包含的驅動程序。

1、調試輸出列印
在xilinx_zynq_defconfig中,需要根據硬體設計正確配置串口列印。

CONFIG_DEBUG_LL=y

CONFIG_DEBUG_ZYNQ_UART0=y //使用串口0列印輸出

CONFIG_EARLY_PRINTK=y

2、內核編譯
修改完xilinx_zynq_defconfig後,可以使用下面命令編譯內核

$sudo //編譯內核需要運行在root權限下

$make distclean //清理文件

$make ARCH=arm xilinx_zynq_defconfig //讀取內核配置信息,即xilinx_zynq_defconfig中的內容

$make ARCH=arm menuconfig //進入內核菜單進行可視化配置,如果xilinx_zynq_defconfig中對內核配置準確時,該步驟可以省略

$make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage -j4 //編譯產生uImage

產生的文件位於arch/arm/boot文件夾內

 

 

七、常見驅動
1、I2C驅動
目前板子上都會用到I2C,首先需要知道I2C從設備的地址,如2/4/8這些.在devicetree中進行設置

 

 

編譯內核的時候加入該驅動,同時修改makefile和kconfig文件

 

 

這樣在編譯內核的時候就能看到將驅動編進內核的選項了。

 

 

 

 

2、ADC驅動
ADC為ZYNQ用來監測電壓或電流的通道,目前ZYNQ中集成了16個通道,首先需要在devicetree中設置啟用的通道,圖中啟用的是0,1,8三個通道

 

 

 

 

 

 

 

 

3、NOR FLASH驅動
NOR FLAHS驅動主要實現文件系統的掛載,這裡不需要設置devicetree,只需要在內核中添加掛載文件系統的代碼

 

 

上圖中將NOR FALSH分為2個區,大小分別為32MB和64MB,需要注意的是NOR FLASH的起始地址和容量大小設置

#defineWINDOW_ADDR 0x80000000 //和vivado裡面的emc起始地址一致

#defineWINDOW_SIZE 0x8000000 //nor flash大小

在makefile中將該驅動編譯進內核即可

 

 

4、外部中斷驅動
當zynq接收來自外部的GPIO中斷時,需要使用UIO機制及時響應中斷,首先在devicetree中模擬出四個GPIO設備

 

 

注意上面的中斷號0x1e-0x21要與硬體實際相連的中斷管腳一致。

同時在devicetree中啟用UIO機制

 

 

當作業系統啟動完成後就能看到四個外部GPIO設備產生的中斷了

 

 

八、啟動文件製作
如下圖所示,在SDK中創建boot.bin需要包含下面五個文件

Fsbl.elf

Zynq_top.bin

u-boot.elf

uImage

devicetree.dtb

uramdisk.image.gz

製作過程中需要正確配置uimage,devicetree.dtb,uramdisk.image.gz的地址,讓其與u-boot中從QSPI flash加載地址匹配

 

 

 

 

 

 

製作完成後將boot.bin通過下載電纜燒入QSPI FLASH中即可。
編輯:hfy

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • Linux作業系統安全的配置說明
    Linux被認為是一個比較安全的Internet伺服器,作為一種開放原始碼作業系統,一旦Linux系統中發現有安全漏洞,Internet上來自世界各地的志願者會踴躍修補它。然而,系統管理員往往不能及時地得到信息並進行更正,這就給黑客以可乘之機。
  • 什麼Linux,Linux內核及Linux作業系統
    什麼是Linux及內核在1991年,有個名為Linus Torvalds的學生在網際網路上發布了一個名為Linux的作業系統。說它是作業系統是因為它實現了對計算機核心硬體的管理。而且很多開源項目也移植到Linux之上,這樣Linux逐漸豐滿起來。慢慢的,很多公司在Linux內核的基礎上增加了開發工具和應用軟體,將Linux內核和這些用戶態的軟體打包成為一個作業系統安裝鏡像,這個系統稱為Linux作業系統,或者稱為Linux發行版。這個Linux作業系統就好像Windows系統一樣,普通用戶可以使用它進行日常工作。
  • 華為18級工程師嘔心瀝血撰寫3000頁Linux學習筆記教程
    無論你是否相信,Linux已經成為這個世界上增長最迅速的作業系統。在伺服器領域,IBM、HP、Novell、Oracle等廠商對Linux 提供了全方位的支持。2011年排名前500的超級計算機中,92.4%(462臺)都採用了Linux作業系統。在桌面領域,Ubuntu、openSUSE等發行版本繼續高歌猛進。
  • 100%純國產作業系統……redflag-linux.Ltd
    說到桌面作業系統,莫過於微軟發布的Windows系統,想當年XP和Win7為微軟攢下了多少粉絲,如今微軟用盡各種手段,「無所不用其極」力推Win10系統,成功讓其市場份額超過50%,令微軟穩坐第一的寶座。 不過為了避免「受制於人」,我國很多科技企業一直致力於作業系統的研發,其中紅旗liunux便是國產作業系統的中堅力量。
  • 國產linux發行版本——deepin作業系統安裝方法
    大家好,歡迎回到萬魔寺,前兩期,和大家一起學習了ubuntu系統的安裝,今天我們一起來學習一下國產linux作業系統deepin的安裝方法。deepin系統是由武漢深之度科技有限公司開發,在網絡上口碑比較好的一款linux國產發行版。
  • 菜鳥如何玩轉linux?
    上回說到電腦技術愛好者必知的作業系統,提到了linux作業系統,但是對於小白來說linux作業系統像是無字天書,根本不知道哪裡可以下載到,更別說怎麼使用了,今天就來講講我們的linux系統在哪裡可以下載到,怎麼去玩linux。
  • Unix和Linux作業系統有什麼區別?
    這個小型機有1個房間那麼大。他不僅在這臺機器上開發出了作業系統內核,還將自己的遊戲重寫了一遍。現在很多年輕人都玩遊戲,但是,有多少人像他那麼執著呢?為了玩個遊戲,自己開發個系統。至於丹尼斯裡奇則是因為發明了C語言編程工具,終結了彙編編程的時代。於是在1973年,Unix系統用C語言進行重寫。是的Unix系統可移植性大大提高。
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    到作業系統系統調用層的封裝。再到tty子系統的核心。再到一系列線路規程。再到最底層的硬體操作。對Linux中的tty子系統進行簡要的說明。從理論到實踐。以便讀者能對OS原理有更深入的了解和更具體的掌握。在具體分析之前。我們必須對串口。驅動。和Linux作業系統有一定的了解。這一階段我們有三個問題需要解決:1.什麼是Linux作業系統。
  • Alibaba Cloud Linux等保2.0三級版鏡像作業系統詳解
    Alibaba Cloud Linux是阿里雲推出的Linux發行版,Alibaba Cloud Linux 2等保2.0三級版鏡像是根據《GB/T22239-2019信息安全技術網絡安全等級保護基本要求》進行等保加固的鏡像,Linux百科網(linuxbaike.com)來詳細說下
  • 如何進行Linux作業系統的安全合規性檢查和加固?
    本文旨在指導系統管理人員或安全檢查人員進行Linux作業系統的安全合規性檢查和加固。  說明:對於部分老版本的Linux作業系統(如CentOS 6),可以使用命令chkconfig \--level   <服務名> off設置服務在指定init級別下開機時不自動啟動。  2.2 SSH服務安全  對SSH服務進行安全加固,防止暴力破解成功。
  • 完善軟體生態,國產Linux作業系統任道重遠
    一直以來,linux作業系統都想要打敗微軟的windows,雖然在伺服器領域出類拔萃,但在桌面領域一直不是windows的對手,其實並不是linux在操作上難用,也不是界面難看,而最重要的一個問題就是生態。
  • 華為有望超躍linux,成為世界第五大作業系統
    根據場調研機構 Counterpoint 於今日發布的一份新報告,到2020年,華為自己的作業系統鴻蒙OS將獲得2%的市場份額,超過linux,成為全球第五大作業系統。據報導,華為為研發該系統已經投入不少於4000人,同時為了吸引更多的開發商解決生態問題,華為狠砸10億美元來鼓勵世界各地的開發者,其中8億美元將用於海外市場。
  • Linux到底怎麼個讀法?有什麼歷史淵源?
    Linux到底怎麼個讀法?有什麼歷史淵源? Linux英 ['lnks] 美 ['lnks]1、linux發音五花八門版本頗多,見到和聽到的不下10種。3、有人綜合網上和linux自己的讀音,概括出幾個自認為最合適也最通用的讀法:/li'n^ks/(「裡那克斯」)或/'li:nэks/(「裡訥克斯」)或/li'nju:ks/(「裡紐克斯」)。4、這幾個應該是誰都聽得懂的。至於哪個比較正宗,當然是linux的原音。但事實上使用linux哪種讀法的人似乎都不在少數。
  • 小米MIUI官方發布MIUI 12相機功能移植說明
    IT之家5月23日消息 今日MIUI官方發布MIUI 12相機功能移植說明,包含一些相機功能移植的細節信息。相機功能移植說明原文:隨著近期新品發布,我們陸續推出了 電影相機、魔法相機、流光相機、MIUI12全新相機 等眾多大家喜愛的功能。在微博以及論壇上也受到了大家很高的關注,非常感謝大家一如既往的支持。在這裡也跟大家再講功能移植的時間以及移植過程做一下簡單的說明。
  • 發展國產作業系統,要從內核寫起嗎?Deepin屬於國產作業系統嗎?
    因此只要是一個作業系統能滿足這一核心目標,就能算作是國產作業系統。完全自己造一個作業系統難度非常大微軟在2005年發布的Windows Vista作業系統,代碼超過5000萬行,開發費用超200億美元,這個數字超過了「阿波羅登月計劃」。
  • Linux系統的Linux應該怎麼讀?正確讀法在這裡,很多人都讀錯了!
    1、linux發音五花八門版本頗多,見到和聽到的不下10種。根據linux的創始人Linus Torvalds的說法,Linux的發音和「Minix」是押韻的。3、有人綜合網上和linux自己的讀音,概括出幾個自認為最合適也最通用的讀法:/li'n^ks/(「裡那克斯」)或/'li:nэks/(「裡訥克斯」)或/li'nju:ks/(「裡紐克斯」)。4、這幾個應該是誰都聽得懂的。至於哪個比較正宗,當然是linux的原因。但事實上使用linux哪種讀法的人似乎都不在少數。
  • 世界上最受歡迎的10個Linux發行版
    幫助新的Linux用戶在越來越多的Linux發行版中選擇最合適的作業系統,是創建這個網頁的原因。它列出了迄今為止最流行的10個Linux發行版(另外增加的是FreeBSD,到目前為止最為流行的BSD系統),通常被視為世界各地的Linux用戶最廣泛推薦的。
  • 「正點原子Linux連載」第三十七章Linux內核移植
    第三十七章Linux內核移植前兩章我們簡單了解了一下Linux內核頂層Makefile和Linux內核的啟動流程,本章我們就來學習一下如何將NXP官方提供的Linux內核移植到正點原子的I.MX6U-ALPHA開發板上。通過本章的學習,我們將掌握如何將半導體廠商提供的Linux BSP包移植到我們自己的平臺上。
  • unix是什麼作業系統_unix作業系統怎麼安裝
    unix是什麼作業系統   UNIX系統是一個分時作業系統。   Unix除了作為網絡作業系統之外,還可以作為單機作業系統使用。Unix作為一種開發平臺和臺式作業系統獲得了廣泛使用,目前主要用於工程應用和科學計算等領域。
  • 移植mplayer播放器到EK200開發板的步驟淺析
    此款軟體可在各主流作業系統使用,一方面它資源佔用率低;另一方面,無論是音頻還是視頻方面,它支持的格式相當全面,能支持播放大部分的音頻、視頻格式。 本文將主要介紹將mplayer播放器移植到明遠智睿MY-IMX6-EK200-6Q-1G開發板的方法及步驟。