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 文件后,重新编译内核。