目录
1.设置“离线编译”和“本地内核源码以及 u-boot 源码”
接着上次的步骤,为了搭建摄像头,这次主要讲解设备部分
建立Petalinux工程
1.设置“离线编译”和“本地内核源码以及 u-boot 源码”
2.修改设备树(第一代)
第一代设备树:
/include/ "system-conf.dtsi"
/ {
misc_clk_a: misc_clk_a {
#clock-cells = <0>;
clock-frequency = <12000000>;
compatible = "fixed-clock";
};
amba_pl: amba_pl@0 {
dpu: DPUCZDX8G@80000000 {
compatible = "xilinx,dpu";
base-addr = <0x80000000>;
};
};
};
&qspi {
status = "okay";
};
/* SD */
&sdhci1 {
disable-wp;
no-1-8-v;
};
/* USB */
&dwc3_0 {
status = "okay";
dr_mode = "host";
};
这次设置的主要是开发板的基础功能。主要描述了系统中的时钟源、DPU设备、QSPI设备、SD卡控制器和USB控制器的配置和状态。帮助用户先跑一下,看看板卡设备是否有问题
3.修改设备树(第二代)
第二代设备树:
/include/ "system-conf.dtsi"
/ {
misc_clk_a: misc_clk_a {
#clock-cells = <0>;
clock-frequency = <12000000>;
compatible = "fixed-clock";
};
amba_pl: amba_pl@0 {
dpu: DPUCZDX8G@81000000 {
compatible = "xilinx,dpu";
base-addr = <0x81000000>;
};
};
misc_clk_a: misc_clk_a {
#clock-cells = <0>;
clock-frequency = <12000000>;
compatible = "fixed-clock";
};
cam_reg_1v8: regulator-1v8 {
compatible = "regulator-fixed";
regulator-name = "1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
cam_reg_2v8: regulator-2v8 {
compatible = "regulator-fixed";
regulator-name = "2v8";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
};
cam_reg_1v5: regulator-1v5 {
compatible = "regulator-fixed";
regulator-name = "1v5";
regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <1500000>;
};
};
&qspi {
status = "okay";
};
&i2c0 {
clock-frequency = <400000>;
eeprom@50{
compatible = "atmel,24c04";
reg = <0x50>;
pagesize = <16>;
};
lm75@48 {
compatible = "nxp,lm75";
reg = <0x48>;
};
};
&i2c1 {
ov5640: camera@3c {
compatible = "ovti,ov5640";
reg = <0x3c>;
clocks = <&misc_clk_a>;
clock-names = "xclk";
/* rotation = <180>; */
DOVDD-supply = <&cam_reg_1v8>;
AVDD-supply = <&cam_reg_2v8>;
DVDD-supply = <&cam_reg_1v5>;
port {
/* MIPI CSI-2 bus endpoint */
ov5640_to_mipi_csi2: endpoint {
remote-endpoint = <&csiss_in>;
clock-lanes = <0>;
data-lanes = <1 2>;
};
};
};
};
&mipi_csi2_rx_subsyst_0{
compatible = "xlnx,mipi-csi2-rx-subsystem-5.0";
csiss_ports: ports {
#address-cells = <1>;
#size-cells = <0>;
csiss_port0: port@0 {
reg = <0>;
xlnx,video-format = <0>;
xlnx,video-width = <8>;
csiss_out: endpoint {
remote-endpoint = <&csc_in>;
};
};
csiss_port1: port@1 {
reg = <1>;
xlnx,video-format = <0>;
xlnx,video-width = <8>;
csiss_in: endpoint {
data-lanes = <1 2>;
remote-endpoint = <&ov5640_to_mipi_csi2>;
};
};
};
};
&v_proc_ss_0{
compatible = "xlnx,v-vpss-scaler-2.2";
reset-gpios = <&gpio 86 1>;
csc_ports: ports {
#address-cells = <1>;
#size-cells = <0>;
csc_port0: port@0 {
reg = <0>;
xlnx,video-format = <3>;
xlnx,video-width = <8>;
csc_in: endpoint {
remote-endpoint = <&csiss_out>;
};
};
csc_port1: port@1 {
reg = <1>;
xlnx,video-format = <3>;
xlnx,video-width = <8>;
csc_out: endpoint {
remote-endpoint = <&vcap_in>;
};
};
};
};
&v_frmbuf_wr_0 {
compatible = "xlnx,axi-frmbuf-wr-v2.1";
reset-gpios = <&gpio 85 1>;
};
&amba_pl {
vcap_mipi {
compatible = "xlnx,video";
dma-names = "port0";
dmas = <&v_frmbuf_wr_0 0>;
vcap_ports: ports {
#address-cells = <1>;
#size-cells = <0>;
vcap_port: port@0 {
direction = "input";
reg = <0>;
vcap_in: endpoint {
remote-endpoint = <&csc_out>;
};
};
};
};
};
/* SD */
&sdhci1 {
disable-wp;
no-1-8-v;
};
/* USB */
&dwc3_0 {
status = "okay";
dr_mode = "host";
};
这次修改后的设备树里面增加了一些和摄像头有关的内容:
- OV5640摄像头设备:新的设备树中添加了一个OV5640摄像头设备,配置了摄像头的各种属性,包括时钟源、电压供应以及线路的连接信息。这在之前的设备树中没有。
- MIPI CSI-2接收子系统:新的设备树中引入了MIPI CSI-2接收子系统,定义了视频格式、视频宽度以及与其他设备的连接信息。
- 视频处理子系统:新的设备树中添加了视频处理子系统,包含了CSC(颜色空间转换器),并定义了视频格式、视频宽度以及与其他设备的连接信息。
- 帧缓冲写入设备:新的设备树中包含了帧缓冲写入设备,包括一个复位GPIO引脚。
- AMBA总线中的视频捕获设备:在新的设备树中,将AMBA总线中的视频捕获设备 (vcap_mipi) 添加到了设备树,其中包括了DMA信息以及与CSC设备的连接信息。
总结:
我的设备树修改的具体过程是:
在github网站里面的设备树只有一部分是我们配置摄像头所需要的,我将设备树代码发送给了chatgpt让它为我说明每一段具体是什么功能。然后我将一些自己认为与摄像头无关的内容删掉,最后留下的内容构成了这个新的设备树。