Linux下DTB文件生成及使用介绍 (linux dtb文件生成)

DTB文件,又称为设备树二进制文件,它是一种被广泛使用的Linux内核机制,用于在嵌入式系统中描述硬件设备的信息。这种机制使得Linux内核与硬件设备之间的联系更加灵活、动态且容易维护。为了使用DTB文件,需要首先生成它,然后将其与内核镜像文件一起加载到嵌入式系统中。本文将讲解如何在Linux系统中生成DTB文件,并对DTB文件的使用进行介绍。

一、DTB文件生成

1.1 生成DTB文件的工具

在Linux系统中生成DTB文件的工具有多种,其中最常用的是devicetree中提供的dtc工具。Dtc工具是一个命令行工具,可以从设备树描述符中生成设备树二进制文件或反向操作。它已经被集成到Linux的源代码中,可以通过以下命令安装它:

“`

$ sudo apt-get install device-tree-compiler

“`

1.2 设备树描述符

生成DTB文件的之一步是编写设备树描述符(dts)文件,该文件用于描述硬件设备的信息。设备树描述符是一种基于文本的、易于阅读的格式,可以在嵌入式系统开发中起到很好的调试作用。以下是一个简单的设备树描述符示例:

“`

/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的设备节点。设备节点包括设备类型、寄存器地址、中断号和节点状态等信息。

1.3 生成DTB文件

有了设备树描述符文件以后,就可以使用dtc工具生成DTB文件了。以下是命令示例:

“`

$ dtc -I dts -O dtb -o test.dtb test.dts

“`

该命令使用输入格式为dts的test.dts文件,输出格式为dtb的test.dtb文件。此外,还可以通过命令行指定设备树文件名和输出文件名等选项参数。

二、DTB文件的使用

2.1 加载DTB文件

在将DTB文件加载到嵌入式系统中之前,需要确保内核配置文件中已开启了设备树支持。此外,还需要确切知道DTB文件的加载位置和命名规则。将DTB文件与内核镜像一起放入启动设备的合适位置,系统将自动加载DTB文件并解析其中的设备信息。

2.2 设备节点的访问

在系统启动过程中,内核会根据DTB文件中的设备节点信息,创建相应的设备节点。应用程序通常需要通过设备节点来访问硬件设备。可以使用/sys/目录下相应节点的路径访问设备节点,例如/dev/mem、/dev/myserial等。

2.3 编写设备驱动程序

此外,还可以编写设备驱动程序来访问设备节点。驱动程序需要适用于自己的设备节点,并包括供应用程序使用的API函数。驱动程序通常是作为Linux内核模块实现的,需要先加载模块并创建相应设备文件,在应用程序中通过设备文件来访问设备节点。

结语

相关问题拓展阅读:

zynqmp 怎么将linux系统下载到emmc

1,vivado硬件配置,要选择EMMC代表的SD1;

2,编译petalinux:执行petalinux-config。

(1)选择Subsystem AUTO Hardware Setting

> Advanced bootable images storage settings

>岩橡首boot image settings;

选择primary flash,这里是将BOOT.bin设置为从qspi flash启动

(2)选择Subsystem AUTO Hardware Setting

> Advanced bootable images storage settings

>kernel image settings;

选择primary sd,进入后我们看到这里实际就是设置image.ub的存放区域。

(3)选择Image Packaging Configuration,设置启动启动

文件系统

所在位置;

在设置启动方式的时候,如下两张图这样设置读取根文件系统的位置/dev/mmcblk1p2。

(4)设置你的驱动然后编译,依次执行:petalinux-config -c kernel;petalinux-config -c rootfs;

petalinux-build;petalinux-package –boot –fl ./images/linux/zynq_fl.elf –fpga –u-boot –force;

3,做之前先分区(把EMMC分区),先做一个

SD卡

启动的petalinux文件,

petalinux系统在zynq上面启动起来以后就进行如下分区:即是mmcblk1分为mmcblk1p1和mmcblk1p2

具体步骤如下:

(1) 把EMMC进行分区,执行命令: fdisk /dev/mmcblk

(2)使用n命令,添加一个新的分区

Command (m for help): n

Command action

e extended

p primary partition (1-4)

选择p,添加主分区

,(3)选择分区号,选择1,

Partition number (1-4):// 选择分区号

First cylinder (, default 1): Using default value // 选择分区的之一个

柱面

,选择1

Last cylinder or +size or +sizeM or +sizeK (, default): Using default value// 选择最后一个柱面

注意:,first要选之一个数,last要选择的比238592小,其中1024就是表示1M

(4)使用t命令,设置分区格式

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)使用对应文件系统工具对分析进行格式化(只能在粗数debian里面才能识别命令)

mkfs.fat /dev/mmcblk1p1 设置为fat32格式

mkfs.ext4 /dev/mmcblk1p2设置为ext4格式

注意:执行完w命令然后才算分区成功,执行完mkfs命令才算格设置内存属性成功。

以上分区完成如源后,可以使用p命令,显示分区信息;也可以使用用d命令表示删除分区

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)执行这句:mkdosfs -F 32 /dev/mmcblk0p1

当然,可以重复上述步骤,多分几个区,用来存放不同的状态:

FLASH要要用来存放BOOT.bin

之一个分区用来存放image.ub或者设备树(比如uImage和devicetree.dtb)等文件;–可以设置为128MB

第二个分区用来存放用户数据(比如可执行程序);可以设置为2023MB

第三个分区用来存放程序执行需要的

库文件

(opencv的库,qtcreator库,相机库,视频编码解码库等);剩余的1个多GB

4,把系统同步到ext4里面

先把sd卡里面系统挂载进来 :mount /dev/mmcblk0p2 /mnt

再把刚刚弄好的系统挂进来: mount /dev/mmcblk1p2 /tmp , 然后cd /mnt

然后进入把SD卡里面的系统同步到emmc里面:rsync -av ./* /tmp ,时间有点久,直到结束为止。

(要是不用SD卡也可以挂载

U盘

,解压,然后进行系统同步到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分区中(不存放到flash中),先使用mount挂载eMMC的FAT分区,

然后将image.ub使用cp指令拷贝进 /mnt/mmcFat即可,也就是把uImage 拷贝到 /dev/mmcblk1p1;

进入uImage所在目录,然后执行 cp uImage /tmp;也就是把uImage存放到了 /dev/mmcblk1p1里面。

6,最后断电拔出SD卡,将拨码开关设置为flash启动,就能看到petalinux启动起来;

7,报错及其解决办法

————————————————

版权声明:本文为CSDN博主「寒听雪落」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

关于linux安装TBB的问题

编译

tar -xf tbb41_oss_src.tgz

cd ./tbb41_oss_src.tgz,

按照readme的提示gmake 编译李灶轿完成之后,build路径下面,会出现:

drwxr-xr-x 2 root root2:42 linux_intel64_gcc_cc4.1.2_libc2.5_kernel2.6.18_debug

drwxr-xr-x 2 root root2:38 linux_intel64_gcc_cc4.1.2_libc2.5_kernel2.6.18_release

修改环境变量

shell下执行: # vim ~/.bashrc

在最后添加 source /root/Desktop/tbb40_233oss/build/linux_intel64_gcc_cc4.1.2_libc2.5_kernel2.6.18_debug/tbbvars.sh

那么使用连接库的时候要使用-ltbb_debug

或者 source /root/Desktop/tbb40_233oss/build/linux_intel64_gcc_cc4.1.2_libc2.5_kernel2.6.18_release/tbbvars.sh 对应的链接库哪肆就是-ltbb了

1、测试 ltbb

重新打开一个shell,进入/tbb/tbb41_oss/examples/pipeline/square

输入make,出现下面信息,表示成功安装

g++ -O2 -DNDEBUG -o square square.cpp -ltbb -lrt

./辩租square 0 input.txt output.txt

serial run time = 0.160147

parallel run time = 0.

elapsed time : 0.seconds

2、测试ltbb_debug,就source deubg文件里面的tbbvars.sh

输入make debug test,出现下面信息表示成功安装

g++ -O2 -o gen_input gen_input.cpp -lrt

./gen_input >input.txt

g++ -O0 -g -DTBB_USE_DEBUG -o square square.cpp -ltbb_debug -lrt

./square 0 input.txt output.txt

serial run time = 0.169299

parallel run time = 0.

elapsed time : 0.26235 seconds

3、测试自己写的cpp文件

记住在编译的时候加上-ltbb或-ltbb_debug。错误一般都是找不到库或者头文件,可以上网看看怎么设置PATH,LIBRARY_PATH,LD_LIBRARY_PATH。把这些路径设到tbb编译好的路径里面就行了。

例如gcc test.cc -ltbb_debug

下载更低版本的,里面就有makefile,我猜测新版本只是增量包

关于linux dtb文件生成的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux下DTB文件生成及使用介绍 (linux dtb文件生成)