Linux设备树 03 ———— 内核笔记

bringup 的過程中,dts需要不斷的修改 ,所以需要學習dtb  調試的方法加以配合

活动地址:CSDN21天学习挑战赛

​學習計畫

1,學習目標

        1.dtb debug

2,學習內容

  1. DTB 的基本調試方法
  2. 內核啟動階段獲得dtb 位置指針過程介紹

3,學習時間

        週一至週五晚上八至十點

        週六至週日晚上八至十點

4,學習產出

        一週三篇

學習筆記

  •  DTS、DTC、DTB三者之間的關系

 

文件意義
DTS設備樹源碼
DTC工具
DTBDTS的二進制檔

  • 範例: 新增一個Camera 設備

        1.新增一個Camera設備,首先需要在dts中加入此設備的描述

	aml_cams{
		compatible = "amlogic,cams_prober";   //与驱动匹配的设备描述
		status = "disabled";
		pinctrl-names = "gpio","csi";  
		pinctrl-0 = <&aml_cam_gpio_pins> ;
		pinctrl-1 = <&aml_cam_csi_pins> ;
……

		cam_1{
			cam_name = "ov5647";    //camera的型号
			front_back = <0>;        //前camera或者后camera 标志
			i2c_bus = "i2c_bus_d";  //挂载 i2c 总线的位置。
			gpio_pwdn = "GPIOH_5";  //电源开关的gpio
			gpio_rst = "GPIOH_4";     //复位控制的gpio
			mirror_flip = <0>;     //左右镜像 控制
			vertical_flip = <0>;	//上下翻转 控制
			config_path = "/system/etc/camera_isp_cfg/ov5647_cw0767";  // isp 配置文件位置
			bt_path = "csi";  //csi 控制器
			interface = "mipi"; //接口属性
			clk_channel = "b"; //clk的通道
			status = "okay";
		};
		……
	};	

        2.create device driver

static const struct of_device_id cams_prober_dt_match[] = {{
	.compatible =
	"amlogic, cams_prober",   //与dts文件中的aml_cams ->compatible 进行匹配 找到amlogic camera的设备
	}, {},
};

static struct platform_driver aml_cams_prober_driver = {
	.probe = aml_cams_probe, .remove = aml_cams_remove, .driver = {
		.name = "aml_cams_prober", 
.owner = THIS_MODULE,
.of_match_table =	cams_prober_dt_match,
	},
};
static struct i2c_driver ov5647_i2c_driver = {
	.driver = {
		.name = "ov5647", //在i2c总线上 与dts文件中cam_1->cam_name 进行匹配找到 ov5647的sensor
	},
	.probe = ov5647_probe,
	.remove = ov5647_remove,
	.id_table = ov5647_id,
};

        3.在driver中調用系統API,讓dts 與 driver  產生關聯(common\include\linux\of.h)

I2c_bus     →   of_property_read_string(p_node, "i2c_bus", &str);
Cam_name  →   of_property_read_string(p_node, "cam_name", &cam_dev->name);
Front_back  →	of_property_read_u32(p_node, "front_back", &cam_dev->front_back);
Mirror_flip  →	of_property_read_u32(p_node, "mirror_flip", &cam_dev->m_flip);
  • 單獨編譯dtb的方法
 source build/envsetup.sh 
     lunch  选择自己的项目平台 xxx
	make dtbimage 
  • dtb image 使用 sd 卡進行燒錄
Uboot$:  mmc dev 0  
Uboot$:  mmcinfo    
Uboot$:  fatload mmc 0 $loadaddr dtb.img 
Uboot$:  store dtb write $loadaddr
  • 調試
get_partition_from_dts: FDT_ERR_BADMAGIC
!!!!get dts FAILED

//如現如上錯誤,表示amlogic-dt-id取值結果與目標不符

S9BOX  # fdt addr 0x1000000 
S9BOX # fdt print

//使用上述指令可print dtb  的文本內容,以此可以得知是否燒錯 dtb檔案
  • 底層dts會覆蓋上層 dts內容

        rv1126.dtsi 指定 pwm0 為 disable  ,但後續 rv1126-evb.dtsi 再次將 pwm0 enable,基於底層覆蓋上層,最終 pwm0 enable.

#rv1126.dtsi
#include rv1126-evb.dtsi
&pwm0 {
	status = "disable";
};


#rv1126-evb.dtsi
&pwm0 {
	status = "okay";
};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值