Apakah kegunaan linux dts
Dalam Linux, dts ialah fail sumber pokok peranti, yang digunakan untuk menerangkan maklumat peranti teknologi pepohon peranti menulis maklumat sumber perkakasan peranti dalam fail dts. Fail sumber pepohon peranti dts disusun ke dalam binari dtb dan dihantar ke sistem pengendalian apabila pemuat but berjalan Sistem pengendalian menghuraikan dan mengembangkannya untuk menjana gambar rajah topologi peranti perkakasan ini, proses penyusunan terus melalui Antara muka yang disediakan oleh sistem memperoleh maklumat nod dan atribut pepohon peranti.
Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.
1.
Pokok peranti (dt: pepohon peranti) ialah perwakilan parameter dan teknologi pemindahan yang digunakan oleh kernel Linux Apabila memulakan peranti semasa fasa but sistem, maklumat perkakasan yang diterangkan dalam pepohon peranti dipindahkan kepada Sistem pengendalian;
-
dts (sumber pokok peranti): fail sumber pepohon peranti, menerangkan maklumat peranti; dalam pemuat but Ia dihantar ke sistem pengendalian semasa masa jalan, dan sistem pengendalian menghuraikan dan mengembangkannya untuk menjana gambar rajah topologi peranti perkakasan Dengan gambar rajah topologi ini, maklumat nod dan atribut pepohon peranti boleh diperolehi terus melalui antara muka yang disediakan oleh sistem semasa proses penyusunan
dtc (penyusun pokok peranti): alat penyusunan/penyahkompilasi/nyahpepijat; > - dtb (perduaan pokok peranti) : Imej pokok peranti binari;
- dtsi (termasuk sumber pokok peranti): fail pengepala yang berfungsi seperti fail pokok peranti dan boleh dirujuk oleh fail dts melalui sertakan
- Dalam kod sumber pemacu peranti, Ia dibahagikan kepada kod pemacu dan kod peranti Kod pemacu ialah kaedah mengendalikan perkakasan Kod peranti ialah sumber perkakasan dan data. Apabila kod pemacu dan kod peranti sepadan, fungsi kuar pemandu akan dipanggil Fungsi kuar akan menggunakan sumber kod peranti untuk memulakan Peranti; , kod peranti telah ditulis terus dalam kod sumber kernel dan wujud dalam bentuk platform_device structure Kod pemacu dan kod peranti juga dipadankan pada bas platform Apabila anda perlu mengubah suai sumber peranti, anda perlu mengubah suai sumber kernel kod;
Tidak menggunakan teknologi pepohon peranti: kod sumber kernel akan diisi dengan sejumlah besar maklumat perihalan perkakasan peranti, menyebabkan kod sumber kernel terus meningkat, tetapi peningkatan kod maklumat perihalan perkakasan dan fungsi inti Tidak berkaitan
- Selepas menggunakan teknologi pepohon peranti: maklumat perihalan perkakasan peranti berada dalam fail dts, yang mudah diubah suai, tetapi kernel perlu menambah kod untuk menghuraikan format fail dts; 🎜>
Pembangunan pemacu Pengarang menulis/mengubah suai fail dts mengikut perkakasan supaya kod pemacu masa hadapan boleh sepadan dengan maklumat perkakasan peranti yang sesuai; >
Apabila menyusun kernel, kernel akan terlebih dahulu menyusun dtc, dan kemudian menggunakan dtc untuk Fail dts disusun menjadi dtb - Apabila uboot memulakan kernel; , ia memindahkan imej kernel dan dtb ke memori dan memberitahu kernel alamat memori dtb; dtb, dan selepas mendapat maklumat perkakasan, ia dipasang ke dalam fungsi perkakasan, dan akhirnya dipadankan dengan kod pemandu; dts format fail kod sumber pokok peranti
- 4.1 Lokasi penyimpanan fail dts dalam kod sumber kernel
seni bina lengan: dalam direktori arch/arm/boot/dts
- 4.2
Komen ialah /* */, ambil perhatian bahawa yang bermula dengan # bukan ulasan
Koma bertitik ialah pemisahan antara simbol blok perenggan, {}, [] dan ialah simbol enkapsulasi bagi blok perenggan dan kelas bahasa C
/dts-v1/ nod mewakili nombor versi dts, pada masa ini Semua v1
/{} ialah nod akar Secara teori, hanya ada satu nod akar Dikatakan bahawa dtc akan menggabungkan semua nod akar sama dts ialah organisasi berbilang nod seperti pokok Unit asas adalah nod Kecuali root, nod lain juga boleh ada anak
4.3.2 Tafsiran format[]: menunjukkan bahawa item boleh. ditinggalkan, : menunjukkan bahawa ia tidak boleh ditinggalkan;
- [label:]: label ialah nama label Untuk memudahkan akses kepada nod, nod boleh diakses terus melalui &label kemudian .
node-name:节点名称。根节点的名称必须是/
[@unit-address]:unit-address是设备地址,如cpu node就是0、1这种,reg node就是0x12010000这种;
cpus { /* 下面三项是cpus节点的属性 */ #address-cells = <1>; #size-cells = <0>; enable-method = "hisilicon,hi3516dv300"; /* 下面是子节点 */ cpu@0 { device_type = "cpu"; compatible = "arm,cortex-a7"; clock-frequency = <HI3516DV300_FIXED_1000M>; reg = <0>; }; };
cpus是cpu的父节点,从形式来能直观的看出来,cpu节点是被cpus节点的大括号括起来的;
cpus节点省略了标签名和设备地址,只有节点名称;
5、节点属性分析
/{ gpx1:gpx1{ controller; #gpio-cells=<2>; }; key@11400c24{ compatible="fs4412,key"; reg=<0x11400c24 0x4>; intn-key=<&gpx1 2 2>; } }
gpio-controller:说明该节点描述的是一个gpio控制器;
#gpio-cells:描述gpio使用节点的属性一个cell的内容;
uart0: uart@120a0000 { compatible = "arm,pl011", "arm,primecell"; reg = <0x120a0000 0x1000>; interrupts = <0 6 4>; clocks = <&clock HI3516DV300_UART0_CLK>; clock-names = "apb_pclk"; status = "disabled"; }; /* 在驱动中对应的结构体*/ //struct device_driver->of_match_table->compatible struct of_device_id { char name[32]; char type[32]; char compatible[128]; const void *data; };
(1)compatible属性是用于设备节点和设备驱动匹配用的,在内核描述驱动的structdevice_driver结构体中,compatible变量中就会保存用于匹配的字符串,当设备节点和驱动的
compatible相同时就匹配成功;
(2)compatible后面可以有多个字符串,优先匹配靠前的字符串,靠前的字符串匹配不上才会匹配后面的字符串;
/ { model = "Tyr DEMO Board"; compatible = "hisilicon,hi3516dv300"; memory { device_type = "memory"; reg = <0x82000000 0x20000000>; };};
(1)model是描述模块信息的,一般只有根节点才有,标明设备树文件对应的开发板的名称;
(2)在内核的启动打印中可以看到model的值:“OF: fdt:Machine model: Tyr DEMO Board”;
&uart0 { status = "okay"; };
状态值 | 含义 |
---|---|
okey | 表示设备是可操作的 |
disabled | 表示当前不可操作,但是后续是可以更改为可操作性的 |
fail、failed | 表示有严重错误,几乎不可能再可操作了 |
(1)status描述设备信息状态,在设备树文件中可以根据需求设置模块的状态,功能就是开启/关闭某个模块;
(2)在dtsi文件中,默认都是关闭模块的,在开发板对应的dts文件中自己去打开需要的模块;
clock: clock@12010000 { compatible = "hisilicon,hi3516dv300-clock"; #address-cells = <1>; /* 表示reg里面的数据address占用一个字长*/ #size-cells = <1>; /* 表示reg里面的数据size占用一个字长,注意字长不是字节*/ #clock-cells = <1>; #reset-cells = <2>; reg = <0x12010000 0x1000>; /*起始地址是0x12010000,长度是0x1000*/ };
reg属性:配置某个硬件模块对应的地址范围信息;
#address-cells属性:表示reg里面的数据address占用的字长,注意字长不是字节;
#size-cells:表示reg里面的数据size占用的字长,注意字长不是字节;
reg =
:address一般用来表示起始地址,length一般表示持续长度;
gic: interrupt-controller@10300000 { compatible = "arm,cortex-a7-gic"; #interrupt-cells = <3>; /*表示interrupts用三个cell来描述中断*/ #address-cells = <0>; interrupt-controller; /*标明gic节点是中断控制器*/ /* gic dist base, gic cpu base , no virtual support */ reg = <0x10301000 0x1000>, <0x10302000 0x100>; }; ipcm: ipcm@045E0000 { compatible = "hisilicon,ipcm-interrupt"; interrupt-parent = <&gic>; /*父节点是gic节点*/ interrupts = <0 10 4>; /*<中断域 中断 触发方式>*/ reg = <0x10300000 0x4000>; status = "okay"; };
(1)interrupt-controller:无值属性,表示这是个中断控制器node
(2)#interrupt-cells:这是中断控制器节点的属性,用来标识这个控制器需要几个cell做中断描述符
(3)interrupt-parent:标识此设备节点属于哪一个中断控制器,如果没有这个属性,会自动依附父节点
(4)interrupts :一个中断标识符列表,表示每一个中断输出信号
6、特殊节点
chosen { stdout-path = "serial0:115200n8"; };
(1)chosen子节点不对应真实的设备,是用来描述内核启动参数的,对应于uboot启动内核时传递的bootargs参数;
(2)上面是摘抄的内核dts文件中的chosen子节点,里面只设置了stdout-path属性,也就是把输出设置成串口0,波特率是115200;
(3)dts文件中设置的属性会被覆盖点,具体就是uboot在启动内核时,会将bootargs启动参数转换成chosen子节点的属性,替换掉dts文件中设置的属性;
~ # ls /proc/device-tree/chosen/ bootargs name ~ # ~ # cat /proc/device-tree/chosen/bootargs mem=1408M console=ttyS0,115200 root=/dev/mmcblk0p7 rootfstype=squashfs rootwait ~ # ~ # cat /proc/device-tree/chosen/name chosen ~ #
aliases { serial0 = &uart0; gpio0 = &gpio_chip0; gpio1 = &gpio_chip1; gpio2 = &gpio_chip2; ······ };
aliases就是别名的意思,aliases节点主要功能就是给节点定义别名,为了方便访问节点。不过我们在节点命名的时候可以加上label标签,直接通过&label引用标签来访问也很方便,aliases节点内部其实也是通过引用标签名来定义别名;
7、节点相关操作
gpio_chip1: gpio_chip@120d1000 { compatible = "arm,pl061", "arm,primecell"; reg = <0x120d1000 0x1000>; interrupts = <0 17 4>; clocks = <&clock HI3516DV300_SYSAPB_CLK>; clock-names = "apb_pclk"; #gpio-cells = <2>; status = "disabled"; }; /*引用gpio_chip1节点*/ &gpio_chip1 { status = "okay"; /*替换status属性内容*/ };
对于已经定义好的节点,我们通过引用节点的方式,重新定义某些属性,效果上看就是替换掉某些属性的值;
/{ node{ key1=value1; } } /{ node{ key2=value2; } } //合并的结果 /{ node{ key1=value1; key2=value2; } }
有时候我们需要增加硬件描述的信息,这时候就可以在后面创新定义该节点,最后解析的时候会把同名节点不同的部分进行合并;
相关推荐:《Linux视频教程》
Atas ialah kandungan terperinci Apakah kegunaan linux dts. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



DeepSeek adalah alat carian dan analisis pintar yang kuat yang menyediakan dua kaedah akses: versi web dan laman web rasmi. Versi web adalah mudah dan cekap, dan boleh digunakan tanpa pemasangan; Sama ada individu atau pengguna korporat, mereka dapat dengan mudah mendapatkan dan menganalisis data besar-besaran melalui DeepSeek untuk meningkatkan kecekapan kerja, membantu membuat keputusan dan menggalakkan inovasi.

Terdapat banyak cara untuk memasang DeepSeek, termasuk: Menyusun dari Sumber (untuk pemaju berpengalaman) menggunakan pakej yang dikompilasi (untuk pengguna Windows) menggunakan bekas docker (untuk yang paling mudah, tidak perlu bimbang tentang keserasian) Dokumen rasmi dengan berhati -hati dan menyediakannya sepenuhnya untuk mengelakkan masalah yang tidak perlu.

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Bitget adalah pertukaran cryptocurrency yang menyediakan pelbagai perkhidmatan perdagangan termasuk perdagangan tempat, perdagangan kontrak dan derivatif. Ditubuhkan pada tahun 2018, pertukaran itu beribu pejabat di Singapura dan komited untuk menyediakan pengguna dengan platform perdagangan yang selamat dan boleh dipercayai. Bitget menawarkan pelbagai pasangan perdagangan, termasuk BTC/USDT, ETH/USDT dan XRP/USDT. Di samping itu, pertukaran mempunyai reputasi untuk keselamatan dan kecairan dan menawarkan pelbagai ciri seperti jenis pesanan premium, perdagangan leverage dan sokongan pelanggan 24/7.

Gate.io adalah pertukaran cryptocurrency yang popular yang boleh digunakan pengguna dengan memuat turun pakej pemasangannya dan memasangnya pada peranti mereka. Langkah -langkah untuk mendapatkan pakej pemasangan adalah seperti berikut: Lawati laman web rasmi Gate.io, klik "Muat turun", pilih sistem operasi yang sepadan (Windows, Mac atau Linux), dan muat turun pakej pemasangan ke komputer anda. Adalah disyorkan untuk mematikan perisian antivirus atau firewall sementara semasa pemasangan untuk memastikan pemasangan yang lancar. Selepas selesai, pengguna perlu membuat akaun Gate.io untuk mula menggunakannya.

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Ouyi Okx, pertukaran aset digital terkemuka di dunia, kini telah melancarkan pakej pemasangan rasmi untuk menyediakan pengalaman perdagangan yang selamat dan mudah. Pakej pemasangan OKX OUYI tidak perlu diakses melalui penyemak imbas. Proses pemasangan adalah mudah dan mudah difahami.

Ouyi, juga dikenali sebagai Okx, adalah platform perdagangan cryptocurrency terkemuka di dunia. Artikel ini menyediakan portal muat turun untuk pakej pemasangan rasmi Ouyi, yang memudahkan pengguna memasang klien OUYI pada peranti yang berbeza. Pakej pemasangan ini menyokong sistem Windows, Mac, Android dan iOS. Selepas pemasangan selesai, pengguna boleh mendaftar atau log masuk ke akaun OUYI, mula membuat kriptografi perdagangan dan nikmati perkhidmatan lain yang disediakan oleh platform.
