1. 如何找到kernel所用的dtsi
想要知道kernel/arch/arm/dts/qcom/目錄下那麼多的dtsi文件到底用了哪個,有幾個途徑
首先看qcom目錄下的makefile
dtb-$(CONFIG_ARCH_MSM8916) += msm8916-sim.dtb \
msm8976-mtp.dtb \
msm8976-mtp-asusevb.dtb \
msm8956-mtp.dtb \
msm8956-mtp-asusevb.dtb \
然後在/out/target/proct/Z00T/obj/KERNEL_OBJ的.config里去找這個CONFIG_ARCH_MSM8916
看到是CONFIG_ARCH_MSM8916=y
所以這樣還不能確定,只能在開機的kernel log里看
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] linux version 3.10.84-g13ef38a-dirty (matthew@matthew) (gcc version 4.9.x-google 20140827 (prerelease) (GCC) ) #3 SMP PREEMPT Sun Dec 6 11:17:54 CST 2015
[ 0.000000] CPU: AArch64 Processor [410fd034] revision 4
[ 0.000000] Machine: Qualcomm Technologies, Inc. MSM8976 MTP
[ 0.000000] No earlyprintk arguments passed.
在qcom下grep Qualcomm Technologies, Inc. MSM8976 MTP 發現在msm8976-mtp-asusevb.dts里,所以知道用了那個
2. 編譯linux內核設備樹文件使用什麼命令
Linux源碼的arch/powerpc/boot/dts/目錄下存放了很多dts文件,可以作為參考文件。另外dtc編譯器在內核回源碼2.6.25版本之後已經答被包含進去。在2.6.26版本之後,生成blob的簡單規則已經加入makefile,如下命令:
$ make ARCH=powerpc canyonlands.dtb
也可以根據自己的硬體修改好dts文件後,用下面類似命令生成dtb文件。
$ dtc -f -I dts -O dtb -R 8 -S 0x3000 test.dts > mpc836x_mds.dtb
$ mkimage -A ppc -O Linux -T flat_dt -C none -a 0x300000 -e 0 -d mpc836x_mds.dtb mpc836x_mds.dtu
3. Linux內核dvfs之cpufreq配置
本文基於 RockPi 4A 單板 Linux4.4 內核介紹 OPP Table 。
內核中將頻率、電壓的相關配置放在 DTSI 文件中,這些配置信息組成的節點被稱為 OPP Table(Operating Performance Points) 。
定義文件: arch/arm64/boot/dts/rockchip/rk3399-opp.dtsi ,內容如下:
上面節點中的相關屬性含義如下:
1、 opp-shared :表示 opp-table1 是小核的各 CPU 共用。
2、 rockchip,temp-hysteresis :遲滯參數,防止頻繁進入高溫或低溫,單位:毫攝氏度。
3、 rockchip,low-temp :低溫閾值。小於該值時,進入低溫,大於『該值+遲滯參數』時,恢復常溫。
4、 rockchip,low-temp-min-volt :低溫下最低電壓,單位:微伏。
5、 nvmem-cells :從 eFUSE 中讀取相關信息值(小核漏電流)。
6、 rockchip,pvtm-voltage-sel :min-pvtm(單位KHz)、max-pvtm(單位KHz)和 voltage-selector (用於匹配 opp 節點中 opp-microvolt-L* 屬性的序列號)。例:pvtm值為:0 ~ 143500 使用 opp-microvolt-L0 ,143501 ~ 148500使用 opp-microvolt-L1
7、 rockchip,pvtm-freq :時鍾頻率(KHz),在獲取 pvtm 的頻率前,先設置 CPU 頻率。
8、 rockchip,pvtm-volt :電壓(微伏),在獲取 pvtm 的頻率前,先設置 CPU 電壓。
9、 rockchip,pvtm-ch : PVTM 通道,格式<通道號 sel的序號>
10、 rockchip,pvtm-sample-time : PVTM 采樣時間,單位:毫秒。
11、 rockchip,pvtm-number : PVTM 采樣個數。
12、 rockchip,pvtm-error :允許采樣數據之間的誤差。
13、 rockchip,pvtm-ref-temp :參考溫度。
14、 rockchip,pvtm-temp-prop : PVTM 隨溫度變化的比例系數,格式<小於參考溫度的比例系數 大於參考溫度的比例系數>。
15、 rockchip,thermal-zone :獲取溫度的 thermal-zone 。
16、 opp-microvolt-L* :電壓(微伏),格式<target min max>
17、 clock-latency-ns :完成變頻需要的時間,單位:納秒。
在 RK3399 中,除了配置上述小核的 opp table 外,還設置了大核( cluster1_opp )、 gpu(gpu_opp_table) 等的相關值。查看命令如下:
註:
CPU PVTM(Process Voltage Temperature Monitor) 是一個位於 CPU 附近,能反應出不同晶元之間性能差異的模塊,受工藝,電壓和溫度 的影響。
參考:
Documentation/devicetree/bindings/cpufreq/cpufreq-rockchip.txt
Documentation/devicetree/bindings/cpufreq/cpufreq-rockchip.txt
4. openwrt怎麼修改linux的dts文件
在linux下要修改文件,一般較常用的命令是vi,格式如下:vi
[文件]。
以樓主的文件為例,vi
/etc/passwd
5. 如何在Zynq 7000平台上使用Linux spidev.c驅動
一、在前來一篇博客中,我們採用自xilinx針對Zynq 7000處理器提供的spi-cadence.c驅動實現了晶元上SPI匯流排驅動的注冊,接下來需要修改設備樹文件以時我們的外設掛接在SPI匯流排下。
在petalinux工程的../subsystems/linux/configs/device-tree目錄下找到zynq相關的設備樹文件,目錄所包含的文件如下圖所示。
打開其中的zynq-7000.dtsi文件,找到其中的spi0節點(具體使用spi0還是spi1根據硬體工程的配置情況),並在該節點下添加如下內容:
6. linux下dts文件中斷號怎麼設置
使用chmod 這個命令來對文件夾修改許可權 例如對tmp目錄下面的aaa文件夾修改許可權 r 是讀許可權 用數字表示是 4 w 是寫許可權 用數字表示是 2 x 是執行許可權 用數字表示是 1 chmod 644 /tmp/aaa 6代表是所有者許可權 4 代表是用戶組許可權 4代表是其他用戶許可權
7. dtsi文件怎麼打開
vi命令打開。dtsi文件使用vi命令打開。dtsi文件用於描述SOC的內部外設信息,比如CPU架構、主頻、外設寄存器地址范圍,比如UART、IIC等等。
8. Linux內核中斷之獲取中斷號
Linux內核中可使用 platform_get_irq() 函數獲取 dts 文件中設置的中斷號。
函數原型: int platform_get_irq(struct platform_device *dev, unsigned int num)
定義文件: driversaseplatform.c
中斷號獲取函數 platform_get_irq() 調用流程如下:
rk3399 使用的是 GICv3 ,對應 irq_domain->name 。
文件: drivers/irqchip/irq-gic-v3.c 。
translate() 函數實現如下:
以 RockPI 4A 單板 Debian 系統Linux 4.4內核中的獲取 HDMI 中斷號為例。
1、查找中斷號
從手冊「Rockchip RK3399 TRM V1.3 Part1.pdf」中,可以查到 HDMI_IRQ 中斷號,即55。
2、 dts 配置
文件: arch/arm64/boot/dts/rockchip/rk3399.dtsi
hdmi 使用的是 GIC_SPI 中斷,按照 gic_irq_domain_translate() 函數中處理,需要將中斷號55減去32,得到 dts 中的中斷號23。
註: interrupts = <中斷類型 中斷號 中斷觸發類型 中斷分區(對應哪個CPU cluster,PPI類型中斷特有)>
3、驅動函數
文件: driversgpudrm ockchipdw_hdmi-rockchip.c
此時, irq 返回值為55。
後續會介紹 GIC 和中斷注冊等實現函數。
9. 嵌入式linux 修改dts文件同時需要修改preloader么
U-Boot 引入了扁平設備樹FDT 這樣的動態介面,使用一個單獨的FDT blob(二進制內大對象,是一個可以容存儲二進制文件的容器)存儲傳遞給內核的參數[3]。一些確定信息,例如cache 大小、中斷路由等直接由設備樹提供,而其他的信息,例如eTSEC 的MAC 地址、頻率、PCI 匯流排數目等由U-Boot 在運行時修改。U-Boot 使用扁平設備樹取代了bd_t,而且也不再保證對bd_t 的後向兼容。需要修改的,重新編譯dts文件。
10. Linux內核watchdog
本文基於 RockPi 4A 單板 Linux 4.4 內核介紹 RK3399 看門狗( watchdog )的調試方法。
一、驅動文件
RK3399 watchdog 用的是新思( Synopsys )的 IP ,在 watchdog 驅動程序載入時,會注冊 misc 設備,節點為 /dev/watchdog 。
驅動文件: drivers/watchdog/dw_wdt.c
二、DTS配置
配置文件: arch/arm64/boot/dts/rockchip/rk3399.dtsi
watchdog 具體配置如下:
三、調試方法
1、關閉看門狗
寫入除大寫 V 以外的任意字元,不再喂狗,一段時間後系統會重啟。
例:
2、打開卡門狗
寫入大寫 V ,繼續喂狗,系統不再重啟。
例:
3、CONFIG_WATCHDOG_NOWAYOUT
如果配置了 CONFIG_WATCHDOG_NOWAYOUT ,通過 echo 命令寫入任何字元,都不會關閉喂狗。
例:
註:
使用 ./build/mk-kernel.sh rockpi4a 編譯內核時,即使修改了 rockchip_linux_defconfig 文件,編譯時,相關配置也不會生效。需要在編譯前 make distclean 或刪除內核根目錄下的 .config 文件後,重新編譯內核。