
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
- 关于linux安装TBB的问题
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文件生成的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器首选树叶云,2H2G首月10元开通。
树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/198083.html<