91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ZYNQ Linux操作系統(tǒng)移植四個(gè)部分說明文檔

電子設(shè)計(jì) ? 來源:Felven的博客 ? 作者:Felven的博客 ? 2020-12-14 14:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、組成
ZYNQ上面移植Linux操作系統(tǒng)包括四個(gè)部分,uboot,devicetree,kernel,ramdisk.

其中uboot類似于bios,負(fù)責(zé)對(duì)設(shè)備進(jìn)行簡(jiǎn)單的初始化,devicetree以樹的形式對(duì)zynq相連的硬件設(shè)備進(jìn)行描述,kernel是加載的操作系統(tǒng)內(nèi)核,ramdisk是操作系統(tǒng)啟動(dòng)之后掛載的文件系統(tǒng)。

二、啟動(dòng)過程
移植操作系統(tǒng)后zynq的啟動(dòng)過程如下,首先加載bootrom(zynq中自帶,用戶無法修改),然后執(zhí)行fsbl(這個(gè)根據(jù)硬件在sdk中創(chuàng)建),然后執(zhí)行uboot,uboot會(huì)將kernel、devicetree和ramdisk載入ddr,跳轉(zhuǎn)到內(nèi)核入口處執(zhí)行,這樣linux就啟動(dòng)了。

o4YBAF9uELeAVxYlAACA6TM13kY883.png

對(duì)bootrom、fsbl和uboot詳細(xì)描述如下。

o4YBAF9uELuABxXtAAQSHlX-gg8443.png

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

通常uboot不需要升級(jí),目前使用的版本為xilinx 2015年底發(fā)布的版本2015.4.不過針對(duì)不同的模塊uboot需要進(jìn)行修改,主要修改下面幾個(gè)地方。

1、參考時(shí)鐘修改
地址位于arch/arm/cpu/armv7/zynq/clk.c

由于ZYNQ設(shè)計(jì)大多使用50M參考時(shí)鐘,需要更改參考時(shí)鐘

# define CONFIG_ZYNQ_PS_CLK_FREQ 33333333UL更改為

# define CONFIG_ZYNQ_PS_CLK_FREQ 50000000UL

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

根據(jù)硬件串口情況進(jìn)行配置

#define CONFIG_ZYNQ_SERIAL_UART1 使用串口1

#define CONFIG_ZYNQ_SERIAL_UART0 使用串口0

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

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

根據(jù)DDR實(shí)際大小地址修改配置參數(shù)

#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

根據(jù)硬件PHY地址進(jìn)行配置,通常硬件會(huì)將PHY地址設(shè)置為0

#define CONFIG_ZYNQ_GEM_PHY_ADDR0 0

如果硬件啟用了兩個(gè)網(wǎng)卡,則需要設(shè)置兩個(gè)PHY的地址

#define CONFIG_ZYNQ_GEM0

#define CONFIG_ZYNQ_GEM_PHY_ADDR0 1


#define CONFIG_ZYNQ_GEM1

#define CONFIG_ZYNQ_GEM_PHY_ADDR1 18

5、啟動(dòng)方式配置
地址位于include/configs/zynq_common.h

如果使用QSPI flash方式啟動(dòng),需要配置QSPI FLASH對(duì)應(yīng)地址,如下。

"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啟動(dòng)時(shí)板子的IP地址

#define CONFIG_SERVERIP 192.168.100.6 //uboot啟動(dòng)時(shí)能訪問的遠(yuǎn)程服務(wù)器地址,若采用TFTP加載,需要將本地電腦配置為該地址

7、啟動(dòng)延遲設(shè)置
地址位于include/configs/zynq_common.h

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

Uboot默認(rèn)延遲7s再?gòu)腝SPI flash中加載操作系統(tǒng),如果設(shè)置為-1表明禁止自動(dòng)加載

8、初始化設(shè)置
地址位于net/eth.c 和 arch/arm/lib/board.c

Uboot中需要對(duì)5396進(jìn)行初始化,同時(shí)使用GPIO對(duì)PHY或NOR FLASH等進(jìn)行復(fù)位,可以在eth.c中增加代碼

void mygpio_init()

{ }

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

9、Uboot編譯
修改完成后,可以使用下列命令編譯產(chǎn)生uboot

進(jìn)入u-boot文件夾

$ make distclean //文件夾清理

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

pIYBAF9uEL6AMFBQAALA61J4tLc224.png

$ make

編譯完成后文件夾下會(huì)出現(xiàn)u-boot文件,將其修改為u-boot.elf

pIYBAF9uEMGAVTaHAAEUBK1PLhE618.png

四、devicetree設(shè)置
devicetree源文件可以從xilinx官方下載,地址:https://github.com/Xilinx/device-tree-xlnx/releases

不同板子的devicetree可以根據(jù)xilinx sdk生成,操作過程如下。

1、在XILINX SDK中打開板子的ZYNQ工程,在xilinx tools中添加devicetree的源文件地址

o4YBAF9uEMKAd6XkAAD_9qCZ7T0945.png

2、創(chuàng)建devicetree BSP文件

o4YBAF9uEMWAa6t6AAGDcllJTKE440.png

創(chuàng)建完成后得到文件如下

pIYBAF9uEMiACjpUAAJ1w0Kz-40516.png

3、將dtsi,dts文件拷入linux系統(tǒng)下,使用dts工具制作devicetree.dtb文件

o4YBAF9uEMqAG0PrAACzS2-9Wm4844.png

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

pIYBAF9uEMyAFFBeAAD4aKdvEPw344.png

生成的1.dts可打開,里面能看到zynq端的外設(shè)信息和啟用情況。通常需要修改網(wǎng)卡配置,如下,下例中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 = ;

};

};

};

當(dāng)對(duì)dts修改完成后,再次使用dtc工具編譯產(chǎn)生devicetree.dtb即可

五、文件系統(tǒng)設(shè)置
文件系統(tǒng)一般隨zynq開發(fā)板發(fā)布,可以從prebuit中找到文件系統(tǒng)的tar文件

o4YBAF9uENGAdTbqAANeO7N49Ds478.png

解壓后得到的文件如下

o4YBAF9uENKAaN0UAAB4NNelZFk463.png

在文件系統(tǒng)中,如果需要添加用戶自定義的shell腳本或可執(zhí)行程序,可以放在/usr/bin目錄下。如果要設(shè)置系統(tǒng)自啟動(dòng)項(xiàng),可以在/etc/rc5.d中增加shell腳本。

pIYBAF9uENSAcBMKAAEaKMBjqkE746.png

這里進(jìn)行了IP地址的配置

o4YBAF9uENeAbdCcAAImwuHNbn0338.png

1、文件系統(tǒng)制作
當(dāng)修改完rootfs后,可以通過下面命令制作uramdisk文件系統(tǒng)

$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

執(zhí)行完畢將會(huì)得到uramdisk.image.gz

六、內(nèi)核配置
內(nèi)核可以從xilinx官方git下載,地址:

目前l(fā)inux內(nèi)核中已經(jīng)集成了常見的驅(qū)動(dòng),驅(qū)動(dòng)源碼位于drivers文件夾下。針對(duì)內(nèi)核的修改位于 arch/arm/configs/xilinx_zynq_defconfig文件中,該文件中定義了內(nèi)核所包含的驅(qū)動(dòng)程序。

1、調(diào)試輸出打印
在xilinx_zynq_defconfig中,需要根據(jù)硬件設(shè)計(jì)正確配置串口打印。

CONFIG_DEBUG_LL=y

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

CONFIG_EARLY_PRINTK=y

2、內(nèi)核編譯
修改完xilinx_zynq_defconfig后,可以使用下面命令編譯內(nèi)核

$sudo //編譯內(nèi)核需要運(yùn)行在root權(quán)限下

$make distclean //清理文件

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

$make ARCH=arm menuconfig //進(jìn)入內(nèi)核菜單進(jìn)行可視化配置,如果xilinx_zynq_defconfig中對(duì)內(nèi)核配置準(zhǔn)確時(shí),該步驟可以省略

$make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage -j4 //編譯產(chǎn)生uImage

產(chǎn)生的文件位于arch/arm/boot文件夾內(nèi)

pIYBAF9uENmAV0RkAACFVqGhqHM345.png

七、常見驅(qū)動(dòng)
1、I2C驅(qū)動(dòng)
目前板子上都會(huì)用到I2C,首先需要知道I2C從設(shè)備的地址,如2/4/8這些.在devicetree中進(jìn)行設(shè)置

pIYBAF9uENuAGShtAAFJWxUxz6M774.png

在內(nèi)核中添加1848的驅(qū)動(dòng)

o4YBAF9uEN2AFbyuAADO0KtUlZM540.png

編譯內(nèi)核的時(shí)候加入該驅(qū)動(dòng),同時(shí)修改makefile和kconfig文件

pIYBAF9uEN-AKuG6AAGcZ2UjQwE993.png

這樣在編譯內(nèi)核的時(shí)候就能看到將驅(qū)動(dòng)編進(jìn)內(nèi)核的選項(xiàng)了。

pIYBAF9uEOGAXXKOAAEK6FT4Fow752.png


o4YBAF9uEOOAQ4COAACr1JAXrW0025.png

編譯完內(nèi)核后,啟動(dòng)時(shí)就能看到1848的從設(shè)備

pIYBAF9uEOWAZDR_AAGCWbxSXJY608.png

2、ADC驅(qū)動(dòng)
ADC為ZYNQ用來監(jiān)測(cè)電壓或電流的通道,目前ZYNQ中集成了16個(gè)通道,首先需要在devicetree中設(shè)置啟用的通道,圖中啟用的是0,1,8三個(gè)通道

o4YBAF9uEOeAdkVvAACePOBUXc0956.png

內(nèi)核中啟用ADC驅(qū)動(dòng)

o4YBAF9uEOqALkYuAALM8Wgyf4A920.png


pIYBAF9uEO6AXrTEAAMBiRFhPxo365.png


o4YBAF9uEPGAaSz7AANXI02i7CY601.png

系統(tǒng)啟動(dòng)后就能看到輸出了,這里輸出的是溫度值

o4YBAF9uEPaAHSDgAAQdG9ZhonQ882.png


pIYBAF9uEPiAd_iDAAGNdVMKyk4343.png

實(shí)際溫度還需要進(jìn)行換算,結(jié)果如下

o4YBAF9uEPyAMSGCAANgyEvE1UQ029.png

3、NOR FLASH驅(qū)動(dòng)
NOR FLAHS驅(qū)動(dòng)主要實(shí)現(xiàn)文件系統(tǒng)的掛載,這里不需要設(shè)置devicetree,只需要在內(nèi)核中添加掛載文件系統(tǒng)的代碼

pIYBAF9uEP-AAG3pAAH3lfykgbw288.png

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

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

#defineWINDOW_SIZE 0x8000000 //nor flash大小

在makefile中將該驅(qū)動(dòng)編譯進(jìn)內(nèi)核即可

o4YBAF9uEQGAOZtOAACRtPBXfVg765.png

啟動(dòng)后就能看到掛載的文件系統(tǒng)了

pIYBAF9uEQOAGBC4AAG4TWrQZhs322.png

4、外部中斷驅(qū)動(dòng)
當(dāng)zynq接收來自外部的GPIO中斷時(shí),需要使用UIO機(jī)制及時(shí)響應(yīng)中斷,首先在devicetree中模擬出四個(gè)GPIO設(shè)備

o4YBAF9uEQaADY5IAAJODkPcmHg981.png

注意上面的中斷號(hào)0x1e-0x21要與硬件實(shí)際相連的中斷管腳一致。

同時(shí)在devicetree中啟用UIO機(jī)制

o4YBAF9uEQeAHuLQAACje5Q-BBs547.png

在編譯內(nèi)核時(shí)將UIO驅(qū)動(dòng)編譯進(jìn)內(nèi)核

pIYBAF9uEQmAXjB-AAESSskar1E386.png

當(dāng)操作系統(tǒng)啟動(dòng)完成后就能看到四個(gè)外部GPIO設(shè)備產(chǎn)生的中斷了

pIYBAF9uEQ6ANu9GAAQIdcAuZOA931.png

八、啟動(dòng)文件制作
如下圖所示,在SDK中創(chuàng)建boot.bin需要包含下面五個(gè)文件

Fsbl.elf

Zynq_top.bin

u-boot.elf

uImage

devicetree.dtb

uramdisk.image.gz

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

pIYBAF9uEROALacYAAS3fSaHpCI455.png


pIYBAF9uERaAU2V8AANG7gbqJ-g675.png


o4YBAF9uERuADv8pAAPaaMcltz0247.png

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


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11760

    瀏覽量

    219040
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7402

    瀏覽量

    129316
  • Zynq
    +關(guān)注

    關(guān)注

    10

    文章

    630

    瀏覽量

    49452
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    操作系統(tǒng)體系結(jié)構(gòu)

    操作系統(tǒng)的體系結(jié)構(gòu)是一個(gè)開放的問題。正如上文所述,操作系統(tǒng)在核心態(tài)為應(yīng)用程序提供公共的服務(wù),那么操作系統(tǒng)在核心態(tài)應(yīng)該提供什么服務(wù)、怎樣提供服務(wù)?有關(guān)這個(gè)問題的回答形成了兩種主要的體系結(jié)
    發(fā)表于 01-15 08:19

    操作系統(tǒng)運(yùn)行機(jī)制

    操作工作在核心態(tài)。   內(nèi)核是計(jì)算機(jī)上配置的底層軟件,是計(jì)算機(jī)功能的延伸。不同系統(tǒng)對(duì)內(nèi)核的定義稍有區(qū)別,大多數(shù)操作系統(tǒng)內(nèi)核包括四個(gè)方面的內(nèi)容。   1) 時(shí)鐘管理   在計(jì)算機(jī)的
    發(fā)表于 01-15 07:12

    Linux 已夠強(qiáng),國(guó)產(chǎn)操作系統(tǒng)為何仍要堅(jiān)持?

    在中國(guó)做技術(shù)的人,或多或少都有過這樣的疑問: “Linux 都這么成熟、這么好用了,國(guó)產(chǎn)操作系統(tǒng)還有必要搞嗎?” 這不是少數(shù)人的困惑,而是整個(gè)行業(yè)幾十年來反復(fù)討論的問題。 但如果你深入工業(yè)、能源
    的頭像 發(fā)表于 12-25 16:11 ?370次閱讀

    什么是嵌入式操作系統(tǒng)?

    要理解嵌入式操作系統(tǒng)(Embedded Operating System,簡(jiǎn)稱 RTOS/EOS),我們可以從本質(zhì)定義→核心區(qū)別→實(shí)際作用→典型特征→嵌入式開發(fā)場(chǎng)景適配,五個(gè)維度來拆解, 一
    發(fā)表于 12-09 10:33

    單片機(jī)的操作系統(tǒng)

    Linux網(wǎng)絡(luò)協(xié)議棧和文件系統(tǒng)(如JFFS2),但實(shí)時(shí)性較弱,需外擴(kuò)存儲(chǔ)器。 ? ? VxWorks ?:高效實(shí)時(shí)操作系統(tǒng),廣泛應(yīng)用于通信、軍事等領(lǐng)域,支持自定義硬件模塊。 ? 其他選擇 ? Keil
    發(fā)表于 11-14 06:18

    移植蜂鳥需要在Linux環(huán)境下嗎?

    《手把手教你設(shè)計(jì)CPU》書上運(yùn)行Verilog仿真測(cè)試那章說為了重現(xiàn)仿真環(huán)境,最好在Linux環(huán)境下。不知道移植蜂鳥是否需要在Linux環(huán)境下,直接在Windows操作系統(tǒng)可否
    發(fā)表于 11-10 07:42

    Jtti Linux操作系統(tǒng)最常見的10大優(yōu)勢(shì)

    Linux操作系統(tǒng)的十大優(yōu)勢(shì) Linux操作系統(tǒng)作為一種開源、自由的系統(tǒng),已經(jīng)廣泛應(yīng)用于個(gè)人計(jì)算機(jī)、服務(wù)器、嵌入式設(shè)備等多個(gè)領(lǐng)域。它的多樣化
    的頭像 發(fā)表于 11-06 15:32 ?308次閱讀

    華為工程師總結(jié)Linux筆記

    Linux基礎(chǔ)知識(shí),非常全面 第 1 章 Linux 快速入門 Linux 是一套免費(fèi)使用和自由傳播的類 UNIX 操作系統(tǒng),是一個(gè)
    發(fā)表于 07-14 15:28

    求助,關(guān)于stellar studio環(huán)境配置后無法編譯例程的問題求解

    已經(jīng)是按照說明文檔進(jìn)行編譯器環(huán)境配置,但是還是會(huì)報(bào)錯(cuò),問題大概可能是文件系統(tǒng)操作錯(cuò)誤,無法訪問打開文件,看樣子像系統(tǒng)問題,但是其他同學(xué)有和我系統(tǒng)
    發(fā)表于 06-16 08:08

    stellar studio按照說明文檔進(jìn)行編譯器環(huán)境配置,為什么會(huì)報(bào)錯(cuò)?

    已經(jīng)是按照說明文檔進(jìn)行編譯器環(huán)境配置,但是還是會(huì)報(bào)錯(cuò),問題大概可能是文件系統(tǒng)操作錯(cuò)誤,無法訪問打開文件,看樣子像系統(tǒng)問題,但是其他同學(xué)有和我系統(tǒng)
    發(fā)表于 06-12 07:49

    求助,關(guān)于stellar studio環(huán)境配置后無法編譯例程的問題求解

    已經(jīng)是按照說明文檔進(jìn)行編譯器環(huán)境配置,但是還是會(huì)報(bào)錯(cuò),問題大概可能是文件系統(tǒng)操作錯(cuò)誤,無法訪問打開文件,看樣子像系統(tǒng)問題,但是其他同學(xué)有和我系統(tǒng)
    發(fā)表于 06-11 06:27

    鴻道Intewell操作系統(tǒng):人形機(jī)器人底層操作系統(tǒng)

    操作系統(tǒng)的實(shí)時(shí)性賦能東土科技的鴻道(Intewell)工業(yè)操作系統(tǒng)作為國(guó)內(nèi)唯一通過汽車、工業(yè)控制、醫(yī)療、軌道交通項(xiàng)功能安全認(rèn)證的系統(tǒng),為標(biāo)準(zhǔn)體系中的技術(shù)層架構(gòu)提供了底層支持。其微內(nèi)核
    的頭像 發(fā)表于 05-16 14:44 ?789次閱讀

    PLC產(chǎn)品故障問題測(cè)試的四個(gè)部分

    ,必須對(duì)故障問題進(jìn)行系統(tǒng)化測(cè)試。本文將詳細(xì)介紹PLC產(chǎn)品故障問題測(cè)試的四個(gè)關(guān)鍵部分,幫助技術(shù)人員快速定位和解決問題。 一、硬件測(cè)試 硬件測(cè)試是PLC故障診斷的首要環(huán)節(jié),主要針對(duì)PLC設(shè)備的物理部件進(jìn)行檢查。首先,需要檢查電源模塊
    的頭像 發(fā)表于 05-11 17:00 ?1781次閱讀
    PLC產(chǎn)品故障問題測(cè)試的<b class='flag-5'>四個(gè)</b><b class='flag-5'>部分</b>

    在cypress 3014進(jìn)行多種分辨率刷新率切換的操作,是否可行?

    我想在cypress 3014進(jìn)行多種分辨率刷新率切換的操作,不知道是否可行,有無相關(guān)demo或者說明文檔可提供
    發(fā)表于 05-09 08:25

    從零開始馴服Linux(一):ZYNQ-Linux啟動(dòng)文件構(gòu)建全解析

    啟動(dòng)卡,SD啟動(dòng)卡的制作方法,可以參考《領(lǐng)航者ZYNQ之嵌入式Linux開發(fā)指南》第六章Petalinux設(shè)計(jì)流程實(shí)戰(zhàn)中的制作SD啟動(dòng)卡小節(jié)。這里不再贅述!將上一節(jié)編譯得到的四個(gè)鏡像文件拷貝到SD啟動(dòng)
    發(fā)表于 03-20 16:48