美文网首页收藏
全志T507主板linux系统的快速调试

全志T507主板linux系统的快速调试

作者: 盈鹏飞嵌入式 | 来源:发表于2023-04-17 14:13 被阅读0次

    我们都知道,T507要改动配置和重新分配处理器的引脚,都要先改动DTS,然后重新编译内核,把固件烧写到板上进行调试。

    这种方式费时,费力。那么如何减少编译次数,同时快速调试主板呢?盈鹏飞嵌入式给出一个方法,仅供大家参考。

    以下介绍内容均在盈鹏飞嵌入式AHD-T507(CoM-T507)主板验证通过。以下是AHD-T507主板的介绍:

    AHD-T507产品功能图:

    产品特性:

    采用Allwinner公司Cortex-A53四核T507处理器,运行最高速度为1.5GHZ;

    支持Mali-G31 MP2 GPU,支持OpenGL ES 3.2/2.0/1.0, Valkan 1.1,OpenCL 2.0

    支持4K/25fps H.264视频编码,支持4K/15fps MJPEG编码;

    多格式4K/60fps视频解码 (H.265,H.264,VC-1, MPEG-1/2/4, VP8) ;

    支持双屏异显;支持RGB666/LVDS,分辨率最高1920x1080/60fps;支持HDMI 2.0A, 分辨率最高4K/60fps;支持TV CVBS OUT(NTSC/PAL);

    支持1-2G  Bytes LPDDR4 SDRAM;

    支持EMMC 4G-64G大容量电子盘,可启动;

    支持SDIO3.0,5路USB2.0 HOST和一路OTG,1路I2C,4路RS485, 2路PWM(应用于背光)

    支持双路以太网,一路10/100M;一路10/100/1000M;

    支持3G/4G通信;

    支持6路AHD视频输入;

    稳定的操作系统的支持,可预装Android10.0/LINUX 4.9/UBUNTU 20.04;

    尺寸为:146*132MM

    如果要快速验证功能,一种是改动DTS,然后重新编译内核等,烧写固件进行验证,那么是否有更快捷的办法呢?

    答案是有的,那就是在线更改DTS。我们都知道,DTS经过编译后,就会变成DTB文件,组后烧写到板上,每次linux系统启动时,

    DTb就会加载到内存,从而配置好主板的相关硬件并加载驱动。如何在线改动DTS呢?这里我们就要介绍的是u-boot相关fdt指令。

    1. uboot FDT命令说明

    FDT:flattened device tree的缩写

    在UBOOT控制台停下后,输入fdt,可以查看fdt命令帮助

    xxx#fdt

    fdt - flattened device tree utility commands

    Usage:

    fdt addr [-c]  <addr> [<length>]  - Set the [control] fdt location to<addr>

    fdt move  <fdt> <newaddr> <length> - Copy the fdt to<addr> and make it active

    fdt resize                          - Resize fdt to size+ padding to 4k addr

    fdt print <path> [<prop>]        - Recursive print starting at <path>

    fdt list  <path> [<prop>]        - Print one level starting at <path>

    fdt get value <var> <path><prop>  - Get <property> andstore in <var>

    fdt get name <var> <path> <index>  - Get name of node <index> and storein <var>

    fdt get addr <var> <path><prop>    - Get start address of<property> and store in <var>

    fdt get size <var> <path>[<prop>]  - Get size of[<property>] or num nodes and store in <var>

    fdt set  <path> <prop> [<val>]    - Set <property> [to <val>]

    fdt mknode <path> <node>            - Create a new node after<path>

    fdt rm    <path> [<prop>]        - Delete the node or <property>

    fdt header                          - Display header info

    fdt bootcpu <id>                    - Set boot cpuid

    fdt memory <addr> <size>            - Add/Update memory node

    fdt rsvmem print                    - Show current mem reserves

    fdt rsvmem add <addr><size>        - Add a mem reserve

    fdt rsvmem delete <index>          - Delete a mem reserves

    fdt chosen [<start> <end>]          - Add/update the /chosen branch inthe tree

                                          <start>/<end> - initrd start/end addr

    fdt save                          - write fdt to flash

    NOTE: Dereference aliases by omiting theleading '/', e.g. fdt print ethernet0.

    sunxi#

    注:

    其中常用的命令就是fdt list 和 fdt set,fdt save.

    Fdt list用来查询节点配置

    Fdt set 用来修改节点配置

    fdt save用来保存修改过的节点。

    查询配置

    首先确定要查询的字段在device tree的路径,如果不知道路径,则需要用fdt命令查询:

    2.1第一步根目录下查找

    xxx#fdtlist  /   

    如果找到需要的配置,比如wlan的配置,运行如下命令即可

    xxx#fdtlist /wlan                //注意路径中的 /

    2.2第二步soc目录查找

    fdtlist /soc

    2.3第三步使用别名查找

    别名是device tree中完整路径的一个简写,有一个专门的节点( /aliases )来表示别名的相关信息,用如下命令可以查看系统中别名的配置情况:

    sunxi#fdtlist /aliases

    aliases{

            serial0 ="/soc@01c00000/uart@01c28000";

          ..............

            mmc0 ="/soc@01c00000/sdmmc@01c0f000";

            mmc2 ="/soc@01c00000/sdmmc@01C11000";

            nand0 ="/soc@01c00000/nand0@01c03000";

            disp ="/soc@01c00000/disp@01000000";

            lcd0 ="/soc@01c00000/lcd0@01c0c000";

            hdmi = "/soc@01c00000/hdmi@01ee0000";

            pwm ="/soc@01c00000/pwm@01c21400";

            boot_disp ="/soc@01c00000/boot_disp";

    };

    盈鹏飞嵌入式在开发AHD-T507主板的时候,经常有用户要适配液晶屏,每次编译内核十分的耗时间。

    以下就以调整液晶参数进行说明:

    调整液晶屏参数,通常涉及两个节点,一个是disp节点,另外一个是lcd0节点。

    我们先看看disp节点有什么?

    => fdt list disp

    disp@01000000 {

            boot_fb0 = "bbf592c0,400,258,20,1000,70,3c,390,21c";

            boot_disp2 = <0x00000004>;

            boot_disp1 = <0x01040000>;

            compatible = "allwinner,sunxi-disp";

            reg = * 0xbbedb92c [0x00000060];

            interrupts = <0x00000000 0x00000058 0x00000004 0x00000000 0x00000040 0x00000004 0x00000000 0x00000041 0x00000004 0x00000000 0x00000042 0x00000004 0x00000000 0x00000043 0x00000004>;

            clocks = <0x0000000b 0x000000ae 0x00000012 0x00000013 0x00000014 0x00000015 0x00000016>;

            boot_disp = <0x00000104>;

            fb_base = <0x00000000>;

            iommus = <0x00000028 0x00000000 0x00000000>;

            status = "okay";

            disp_init_enable = <0x00000001>;

            disp_mode = <0x00000003>;

            screen0_output_type = <0x00000001>;

            screen0_output_mode = <0x00000004>;

            screen1_output_type = <0x00000003>;

            screen1_output_mode = <0x0000000a>;

            screen1_output_format = <0x00000000>;

            screen1_output_bits = <0x00000000>;

            screen1_output_eotf = <0x00000004>;

            screen1_output_cs = <0x00000101>;

            screen1_output_dvi_hdmi = <0x00000002>;

            screen1_output_range = <0x00000002>;

            screen1_output_scan = <0x00000000>;

            screen1_output_aspect_ratio = <0x00000008>;

            dev0_output_type = <0x00000001>;

            dev0_output_mode = <0x00000004>;

            dev0_screen_id = <0x00000000>;

            dev0_do_hpd = <0x00000000>;

            dev1_output_type = <0x00000003>;

            dev1_output_mode = <0x0000000a>;

            dev1_screen_id = <0x00000001>;

            dev1_do_hpd = <0x00000001>;

            def_output_dev = <0x00000000>;

            hdmi_mode_check = <0x00000001>;

            fb0_format = <0x00000009>;

            fb0_width = <0x00000400>;

            fb0_height = <0x00000258>;

            fb1_format = <0x00000000>;

            fb1_width = <0x00000780>;

            fb1_height = <0x00000438>;

            chn_cfg_mode = <0x00000001>;

            disp_para_zone = <0x00000001>;

            dc1sw-supply = <0x000000af>;

            bldo1-supply = <0x0000005b>;

            cldo4-supply = <0x00000062>;

            screen0_output_format = <0x00000000>;

            screen0_output_bits = <0x00000000>;

            screen0_output_eotf = <0x00000004>;

            screen0_output_cs = <0x00000101>;

            screen0_output_dvi_hdmi = <0x00000002>;

            screen0_output_range = <0x00000002>;

            screen0_output_scan = <0x00000000>;

            screen0_output_aspect_ratio = <0x00000008>;

    };

    以下指令我们把这个disp_mode设置为0;

    => fdt set disp disp_mode <0>;

    => fdt list disp

    disp@01000000 {

            boot_fb0 = "bbf592c0,400,258,20,1000,70,3c,390,21c";

            boot_disp2 = <0x00000004>;

            boot_disp1 = <0x01040000>;

            compatible = "allwinner,sunxi-disp";

            reg = * 0xbbedb92c [0x00000060];

            interrupts = <0x00000000 0x00000058 0x00000004 0x00000000 0x00000040 0x00000004 0x00000000 0x00000041 0x00000004 0x00000000 0x00000042 0x00000004 0x00000000 0x00000043 0x00000004>;

            clocks = <0x0000000b 0x000000ae 0x00000012 0x00000013 0x00000014 0x00000015 0x00000016>;

            boot_disp = <0x00000104>;

            fb_base = <0x00000000>;

            iommus = <0x00000028 0x00000000 0x00000000>;

            status = "okay";

            disp_init_enable = <0x00000001>;

            disp_mode = <0x00000000>;

            screen0_output_type = <0x00000001>;

            screen0_output_mode = <0x00000004>;

            screen1_output_type = <0x00000003>;

            screen1_output_mode = <0x0000000a>;

            screen1_output_format = <0x00000000>;

            screen1_output_bits = <0x00000000>;

            screen1_output_eotf = <0x00000004>;

            screen1_output_cs = <0x00000101>;

            screen1_output_dvi_hdmi = <0x00000002>;

            screen1_output_range = <0x00000002>;

            screen1_output_scan = <0x00000000>;

            screen1_output_aspect_ratio = <0x00000008>;

            dev0_output_type = <0x00000001>;

            dev0_output_mode = <0x00000004>;

            dev0_screen_id = <0x00000000>;

            dev0_do_hpd = <0x00000000>;

            dev1_output_type = <0x00000003>;

            dev1_output_mode = <0x0000000a>;

            dev1_screen_id = <0x00000001>;

            dev1_do_hpd = <0x00000001>;

            def_output_dev = <0x00000000>;

            hdmi_mode_check = <0x00000001>;

            fb0_format = <0x00000009>;

            fb0_width = <0x00000400>;

            fb0_height = <0x00000258>;

            fb1_format = <0x00000000>;

            fb1_width = <0x00000780>;

            fb1_height = <0x00000438>;

            chn_cfg_mode = <0x00000001>;

            disp_para_zone = <0x00000001>;

            dc1sw-supply = <0x000000af>;

            bldo1-supply = <0x0000005b>;

            cldo4-supply = <0x00000062>;

            screen0_output_format = <0x00000000>;

            screen0_output_bits = <0x00000000>;

            screen0_output_eotf = <0x00000004>;

            screen0_output_cs = <0x00000101>;

            screen0_output_dvi_hdmi = <0x00000002>;

            screen0_output_range = <0x00000002>;

            screen0_output_scan = <0x00000000>;

            screen0_output_aspect_ratio = <0x00000008>;

    };

    保存设置;

    => fdt save

    uboot size = 0xd8000

    storage type = 2

    => fdt list disp

    disp@01000000 {

            boot_fb0 = "bbf592c0,400,258,20,1000,70,3c,390,21c";

            boot_disp2 = <0x00000004>;

            boot_disp1 = <0x01040000>;

            compatible = "allwinner,sunxi-disp";

            reg = * 0xbbedb92c [0x00000060];

            interrupts = <0x00000000 0x00000058 0x00000004 0x00000000 0x00000040 0x00000004 0x00000000 0x00000041 0x00000004 0x00000000 0x00000042 0x00000004 0x00000000 0x00000043 0x00000004>;

            clocks = <0x0000000b 0x000000ae 0x00000012 0x00000013 0x00000014 0x00000015 0x00000016>;

            boot_disp = <0x00000104>;

            fb_base = <0x00000000>;

            iommus = <0x00000028 0x00000000 0x00000000>;

            status = "okay";

            disp_init_enable = <0x00000001>;

            disp_mode = <0x00000000>;

            screen0_output_type = <0x00000001>;

            screen0_output_mode = <0x00000004>;

            screen1_output_type = <0x00000003>;

            screen1_output_mode = <0x0000000a>;

            screen1_output_format = <0x00000000>;

            screen1_output_bits = <0x00000000>;

            screen1_output_eotf = <0x00000004>;

            screen1_output_cs = <0x00000101>;

            screen1_output_dvi_hdmi = <0x00000002>;

            screen1_output_range = <0x00000002>;

            screen1_output_scan = <0x00000000>;

            screen1_output_aspect_ratio = <0x00000008>;

            dev0_output_type = <0x00000001>;

            dev0_output_mode = <0x00000004>;

            dev0_screen_id = <0x00000000>;

            dev0_do_hpd = <0x00000000>;

            dev1_output_type = <0x00000003>;

            dev1_output_mode = <0x0000000a>;

            dev1_screen_id = <0x00000001>;

            dev1_do_hpd = <0x00000001>;

            def_output_dev = <0x00000000>;

            hdmi_mode_check = <0x00000001>;

            fb0_format = <0x00000009>;

            fb0_width = <0x00000400>;

            fb0_height = <0x00000258>;

            fb1_format = <0x00000000>;

            fb1_width = <0x00000780>;

            fb1_height = <0x00000438>;

            chn_cfg_mode = <0x00000001>;

            disp_para_zone = <0x00000001>;

            dc1sw-supply = <0x000000af>;

            bldo1-supply = <0x0000005b>;

            cldo4-supply = <0x00000062>;

            screen0_output_format = <0x00000000>;

            screen0_output_bits = <0x00000000>;

            screen0_output_eotf = <0x00000004>;

            screen0_output_cs = <0x00000101>;

            screen0_output_dvi_hdmi = <0x00000002>;

            screen0_output_range = <0x00000002>;

            screen0_output_scan = <0x00000000>;

            screen0_output_aspect_ratio = <0x00000008>;

    };

    再进行lcd0节点的查看和设置:

    => fdt list lcd0

    lcd0@01c0c000 {

            compatible = "allwinner,sunxi-lcd0";

            pinctrl-names = "active", "sleep";

            status = "okay";

            lcd_used = <0x00000001>;

            lcd_driver_name = "default_lcd";

            lcd_backlight = <0x000000c8>;

            lcd_if = <0x00000003>;

            lcd_x = <0x00000400>;

            lcd_y = <0x00000258>;

            lcd_width = <0x00000096>;

            lcd_height = <0x0000005e>;

            lcd_dclk_freq = <0x00000032>;

            lcd_pwm_used = <0x00000001>;

            lcd_pwm_ch = <0x00000000>;

            lcd_pwm_freq = <0x0000c350>;

            lcd_pwm_pol = <0x00000001>;

            lcd_pwm_max_limit = <0x000000ff>;

            lcd_hbp = <0x000000a0>;

            lcd_ht = <0x0000052c>;

            lcd_hspw = <0x00000074>;

            lcd_vbp = <0x00000018>;

            lcd_vt = <0x00000275>;

            lcd_vspw = <0x00000003>;

            lcd_lvds_if = <0x00000000>;

            lcd_lvds_colordepth = <0x00000000>;

            lcd_lvds_mode = <0x00000000>;

            lcd_frm = <0x00000000>;

            lcd_hv_clk_phase = <0x00000000>;

            lcd_hv_sync_polarity = <0x00000000>;

            lcd_gamma_en = <0x00000000>;

            lcd_bright_curve_en = <0x00000000>;

            lcd_cmap_en = <0x00000000>;

            lcd_fsync_en = <0x00000000>;

            lcd_fsync_act_time = <0x000003e8>;

            lcd_fsync_dis_time = <0x000003e8>;

            lcd_fsync_pol = <0x00000000>;

            deu_mode = <0x00000000>;

            lcdgamma4iep = <0x00000016>;

            smart_color = <0x0000005a>;

            lcd_pin_power = "bldo1";

            lcd_power = "dc1sw";

            lcd_bl_en = <0x00000032 0x00000003 0x00000017 0x00000001 0x00000000 0x00000003 0x00000001>;

            pinctrl-0 = <0x000000b0>;

            pinctrl-1 = <0x000000b1>;

    };

    =>

    希望这个说明对广大朋友有用!欢迎交流。

    相关文章

      网友评论

        本文标题:全志T507主板linux系统的快速调试

        本文链接:https://www.haomeiwen.com/subject/mqlcjdtx.html