新聞中心
DTB文件,又稱為設(shè)備樹二進制文件,它是一種被廣泛使用的Linux內(nèi)核機制,用于在嵌入式系統(tǒng)中描述硬件設(shè)備的信息。這種機制使得Linux內(nèi)核與硬件設(shè)備之間的聯(lián)系更加靈活、動態(tài)且容易維護。為了使用DTB文件,需要首先生成它,然后將其與內(nèi)核鏡像文件一起加載到嵌入式系統(tǒng)中。本文將講解如何在Linux系統(tǒng)中生成DTB文件,并對DTB文件的使用進行介紹。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、鐵山港網(wǎng)站維護、網(wǎng)站推廣。
一、DTB文件生成
1.1 生成DTB文件的工具
在Linux系統(tǒng)中生成DTB文件的工具有多種,其中最常用的是devicetree中提供的dtc工具。Dtc工具是一個命令行工具,可以從設(shè)備樹描述符中生成設(shè)備樹二進制文件或反向操作。它已經(jīng)被集成到Linux的源代碼中,可以通過以下命令安裝它:
“`
$ sudo apt-get install device-tree-compiler
“`
1.2 設(shè)備樹描述符
生成DTB文件的之一步是編寫設(shè)備樹描述符(dts)文件,該文件用于描述硬件設(shè)備的信息。設(shè)備樹描述符是一種基于文本的、易于閱讀的格式,可以在嵌入式系統(tǒng)開發(fā)中起到很好的調(diào)試作用。以下是一個簡單的設(shè)備樹描述符示例:
“`
/dts-v1/;
/ {
model = “My first device tree”;
compatible = “my-first-device”;
memory@80000000 {
device_type = “memory”;
reg = ;
};
myserial@90000000 {
compatible = “my-serial”;
reg = ;
interrupts = ;
status = “okay”;
};
};
“`
在上面的示例中,分別定義了一個名為memory和一個名為myserial的設(shè)備節(jié)點。設(shè)備節(jié)點包括設(shè)備類型、寄存器地址、中斷號和節(jié)點狀態(tài)等信息。
1.3 生成DTB文件
有了設(shè)備樹描述符文件以后,就可以使用dtc工具生成DTB文件了。以下是命令示例:
“`
$ dtc -I dts -O dtb -o test.dtb test.dts
“`
該命令使用輸入格式為dts的test.dts文件,輸出格式為dtb的test.dtb文件。此外,還可以通過命令行指定設(shè)備樹文件名和輸出文件名等選項參數(shù)。
二、DTB文件的使用
2.1 加載DTB文件
在將DTB文件加載到嵌入式系統(tǒng)中之前,需要確保內(nèi)核配置文件中已開啟了設(shè)備樹支持。此外,還需要確切知道DTB文件的加載位置和命名規(guī)則。將DTB文件與內(nèi)核鏡像一起放入啟動設(shè)備的合適位置,系統(tǒng)將自動加載DTB文件并解析其中的設(shè)備信息。
2.2 設(shè)備節(jié)點的訪問
在系統(tǒng)啟動過程中,內(nèi)核會根據(jù)DTB文件中的設(shè)備節(jié)點信息,創(chuàng)建相應(yīng)的設(shè)備節(jié)點。應(yīng)用程序通常需要通過設(shè)備節(jié)點來訪問硬件設(shè)備??梢允褂?sys/目錄下相應(yīng)節(jié)點的路徑訪問設(shè)備節(jié)點,例如/dev/mem、/dev/myserial等。
2.3 編寫設(shè)備驅(qū)動程序
此外,還可以編寫設(shè)備驅(qū)動程序來訪問設(shè)備節(jié)點。驅(qū)動程序需要適用于自己的設(shè)備節(jié)點,并包括供應(yīng)用程序使用的API函數(shù)。驅(qū)動程序通常是作為Linux內(nèi)核模塊實現(xiàn)的,需要先加載模塊并創(chuàng)建相應(yīng)設(shè)備文件,在應(yīng)用程序中通過設(shè)備文件來訪問設(shè)備節(jié)點。
結(jié)語
相關(guān)問題拓展閱讀:
- zynqmp 怎么將linux系統(tǒng)下載到emmc
- 關(guān)于linux安裝TBB的問題
zynqmp 怎么將linux系統(tǒng)下載到emmc
1,vivado硬件配置,要選擇EMMC代表的SD1;
2,編譯petalinux:執(zhí)行petalinux-config。
(1)選擇Subsystem AUTO Hardware Setting
> Advanced bootable images storage settings
>巖橡首boot image settings;
選擇primary flash,這里是將BOOT.bin設(shè)置為從qspi flash啟動
(2)選擇Subsystem AUTO Hardware Setting
> Advanced bootable images storage settings
>kernel image settings;
選擇primary sd,進入后我們看到這里實際就是設(shè)置image.ub的存放區(qū)域。
(3)選擇Image Packaging Configuration,設(shè)置啟動啟動
文件系統(tǒng)
所在位置;
在設(shè)置啟動方式的時候,如下兩張圖這樣設(shè)置讀取根文件系統(tǒng)的位置/dev/mmcblk1p2。
(4)設(shè)置你的驅(qū)動然后編譯,依次執(zhí)行:petalinux-config -c kernel;petalinux-config -c rootfs;
petalinux-build;petalinux-package –boot –fl ./images/linux/zynq_fl.elf –fpga –u-boot –force;
3,做之前先分區(qū)(把EMMC分區(qū)),先做一個
SD卡
啟動的petalinux文件,
petalinux系統(tǒng)在zynq上面啟動起來以后就進行如下分區(qū):即是mmcblk1分為mmcblk1p1和mmcblk1p2
具體步驟如下:
(1) 把EMMC進行分區(qū),執(zhí)行命令: fdisk /dev/mmcblk
(2)使用n命令,添加一個新的分區(qū)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
選擇p,添加主分區(qū)
,(3)選擇分區(qū)號,選擇1,
Partition number (1-4):// 選擇分區(qū)號
First cylinder (, default 1): Using default value // 選擇分區(qū)的之一個
柱面
,選擇1
Last cylinder or +size or +sizeM or +sizeK (, default): Using default value// 選擇最后一個柱面
注意:,first要選之一個數(shù),last要選擇的比238592小,其中1024就是表示1M
(4)使用t命令,設(shè)置分區(qū)格式
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)使用對應(yīng)文件系統(tǒng)工具對分析進行格式化(只能在粗數(shù)debian里面才能識別命令)
mkfs.fat /dev/mmcblk1p1 設(shè)置為fat32格式
mkfs.ext4 /dev/mmcblk1p2設(shè)置為ext4格式
注意:執(zhí)行完w命令然后才算分區(qū)成功,執(zhí)行完mkfs命令才算格設(shè)置內(nèi)存屬性成功。
以上分區(qū)完成如源后,可以使用p命令,顯示分區(qū)信息;也可以使用用d命令表示刪除分區(qū)
Command (m for help): p
Disk /dev/mmcblk0: 7818 MB,bytes
4 heads, 16 sectors/track,cylinders
Units = cylinders of 64 * 512 =bytes
Device Boot StartEnd Blocks Id System
/dev/mmcblk0p 83 Linux
(7)執(zhí)行這句:mkdosfs -F 32 /dev/mmcblk0p1
當然,可以重復上述步驟,多分幾個區(qū),用來存放不同的狀態(tài):
FLASH要要用來存放BOOT.bin
之一個分區(qū)用來存放image.ub或者設(shè)備樹(比如uImage和devicetree.dtb)等文件;–可以設(shè)置為128MB
第二個分區(qū)用來存放用戶數(shù)據(jù)(比如可執(zhí)行程序);可以設(shè)置為2023MB
第三個分區(qū)用來存放程序執(zhí)行需要的
庫文件
(opencv的庫,qtcreator庫,相機庫,視頻編碼解碼庫等);剩余的1個多GB
4,把系統(tǒng)同步到ext4里面
先把sd卡里面系統(tǒng)掛載進來 :mount /dev/mmcblk0p2 /mnt
再把剛剛弄好的系統(tǒng)掛進來: mount /dev/mmcblk1p2 /tmp , 然后cd /mnt
然后進入把SD卡里面的系統(tǒng)同步到emmc里面:rsync -av ./* /tmp ,時間有點久,直到結(jié)束為止。
(要是不用SD卡也可以掛載
U盤
,解壓,然后進行系統(tǒng)同步到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分區(qū)中(不存放到flash中),先使用mount掛載eMMC的FAT分區(qū),
然后將image.ub使用cp指令拷貝進 /mnt/mmcFat即可,也就是把uImage 拷貝到 /dev/mmcblk1p1;
進入uImage所在目錄,然后執(zhí)行 cp uImage /tmp;也就是把uImage存放到了 /dev/mmcblk1p1里面。
6,最后斷電拔出SD卡,將撥碼開關(guān)設(shè)置為flash啟動,就能看到petalinux啟動起來;
7,報錯及其解決辦法
————————————————
版權(quán)聲明:本文為CSDN博主「寒聽雪落」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
名稱欄目:Linux下DTB文件生成及使用介紹 (linux dtb文件生成)
文章源于:http://fisionsoft.com.cn/article/cogopsp.html


咨詢
建站咨詢
