野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 142|回复: 0

[求助] 求助 RGB_LED驱动模块无法加载,提示非法参数

[复制链接]
发表于 2024-7-26 00:10:15 | 显示全部楼层 |阅读模式
这是驱动的代码

  1. #include <linux/types.h>
  2. #include <linux/kernel.h>
  3. #include <linux/delay.h>
  4. #include <linux/ide.h>
  5. #include <linux/init.h>
  6. #include <linux/module.h>
  7. #include <linux/errno.h>
  8. #include <linux/gpio.h>
  9. #include <linux/cdev.h>
  10. #include <linux/device.h>
  11. #include <linux/of.h>
  12. #include <linux/of_address.h>
  13. #include <linux/of_gpio.h>   //注意这个是新加的
  14. #include <asm/mach/map.h>
  15. #include <asm/uaccess.h>
  16. #include <asm/io.h>

  17. #define GPIOLED_CNT            1           /* 设备号个数 */
  18. #define GPIOLED_NAME       "gpiorgb"       /* 名字 */


  19. /* gpioled设备结构体 */
  20. struct gpioled_dev{
  21.     dev_t         devid;    /* 设备号   */
  22.     struct cdev   cdev;     /* cdev     */
  23.     struct class  *class;   /* 类       */
  24.     struct device *device;  /* 设备     */
  25.     int           major;    /* 主设备号 */
  26.     int           minor;    /* 次设备号 */
  27.     struct device_node *nd; /* 设备节点 */
  28.     int           rLEd; /* rled使用的GPIO编号*/
  29.     int           gLEd; /* gled使用的GPIO编号*/
  30.     int           bLEd; /* bled使用的GPIO编号*/
  31. };

  32. struct gpioled_dev gpioled;    /* led设备 */

  33. /*
  34. * @description   : 打开设备
  35. * @param - inode : 传递给驱动的inode
  36. * @param - filp  : 设备文件,file结构体有个叫做private_data的成员变量
  37. *                    一般在open的时候将private_data指向设备结构体。
  38. * [url=home.php?mod=space&uid=82536]@return[/url]        : 0 成功;其他 失败
  39. */
  40. static int gpioled_open(struct inode *inode, struct file *filp)
  41. {
  42.     printk("gpioled open!\n");
  43.     filp->private_data = &gpioled; /* 设置私有数据 */
  44.     return 0;
  45. }


  46. /*
  47. * @description  : 从设备读取数据
  48. * @param - filp : 要打开的设备文件(文件描述符)
  49. * @param - buf  : 返回给用户空间的数据缓冲区
  50. * @param - cnt  : 要读取的数据长度
  51. * @param - offt : 相对于文件首地址的偏移
  52. * @return       : 读取的字节数,如果为负值,表示读取失败
  53. */
  54. static ssize_t gpioled_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt)
  55. {
  56.     printk("gpioled read!\n");
  57.     return 0;
  58. }

  59. /*
  60. * @description  : 向设备写数据
  61. * @param - filp : 设备文件,表示打开的文件描述符
  62. * @param - buf  : 要写给设备写入的数据
  63. * @param - cnt  : 要写入的数据长度
  64. * @param - offt : 相对于文件首地址的偏移
  65. * @return       : 写入的字节数,如果为负值,表示写入失败
  66. */
  67. static ssize_t gpioled_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *offt)
  68. {
  69.    unsigned char write_data; //用于保存接收到的数据


  70.     //读取用户输入


  71.         int error = copy_from_user(&write_data, buf, cnt);
  72.         if(error < 0) {
  73.                 return -1;
  74.         }

  75.     /*设置 GPIO1_04 输出电平*/
  76.         if(write_data & 0x04)
  77.         {
  78.                 gpio_direction_output(gpioled.rLEd, 0);  // GPIO1_04引脚输出低电平,红灯亮
  79.         }
  80.         else
  81.         {
  82.                 gpio_direction_output(gpioled.rLEd, 1);    // GPIO1_04引脚输出高电平,红灯灭
  83.         }


  84.     /*设置 GPIO4_20 输出电平*/
  85.         if(write_data & 0x02)
  86.         {
  87.                 gpio_direction_output(gpioled.gLEd, 0);  // GPIO4_20引脚输出低电平,绿灯亮
  88.         }
  89.         else
  90.         {
  91.                 gpio_direction_output(gpioled.gLEd, 1);    // GPIO4_20引脚输出高电平,绿灯灭
  92.         }


  93.     /*设置 GPIO4_19 输出电平*/
  94.         if(write_data & 0x01)
  95.         {
  96.                 gpio_direction_output(gpioled.bLEd, 0);  // GPIO4_19引脚输出低电平,蓝灯亮
  97.         }
  98.         else
  99.         {
  100.                 gpio_direction_output(gpioled.bLEd, 1);    // GPIO4_19引脚输出高电平,蓝灯灭
  101.         }

  102.         return 0;
  103. }


  104. /*
  105. * @description   : 关闭/释放设备
  106. * @param - filp  : 要关闭的设备文件(文件描述符)
  107. * @return        : 0 成功;其他 失败
  108. */
  109. static int gpioled_release(struct inode *inode, struct file *filp)
  110. {
  111.     printk("gpioled release!\n");
  112.     return 0;
  113. }

  114. /* 设备操作函数 */
  115. static struct file_operations gpioled_fops = {
  116.     .owner   = THIS_MODULE,   
  117.     .open    = gpioled_open,
  118.     .read    = gpioled_read,
  119.     .write   = gpioled_write,
  120.     .release = gpioled_release,
  121. };

  122. /*
  123. * @description   : LED硬件初始化(IO映射、时钟、GPIO配置)
  124. * @param         : 无
  125. * @return        : 0 成功;其他 失败
  126. */
  127. static int gpioled_hardware_init(void)
  128. {
  129.     int ret;
  130.     /* 获取设备树中的属性数据 */
  131.     /* 1、获取设备节点:rgb_led */
  132.     gpioled.nd = of_find_node_by_path("/rgb_led");
  133.     if(gpioled.nd == NULL)
  134.     {
  135.         printk("gpioled node not find!\r\n");
  136.         return -EINVAL;
  137.     }
  138.     else
  139.     {
  140.         printk("gpioled node find!\r\n");
  141.     }

  142.     /* 2、获取gpio属性, 得到LED编号 */
  143.     gpioled.rLEd = of_get_named_gpio(gpioled.nd, "rgb_led_red", 0);
  144.     gpioled.gLEd = of_get_named_gpio(gpioled.nd, "rgb_led_green", 0);
  145.     gpioled.bLEd = of_get_named_gpio(gpioled.nd, "rgb_led_blue", 0);
  146.     if((gpioled.rLEd < 0) || (gpioled.bLEd < 0) || (gpioled.gLEd < 0))
  147.     {
  148.         printk("can't get LED resources\r\n");
  149.         return -EINVAL;
  150.     }
  151.     else
  152.     {
  153.         printk("redgpio num = %d greengpio num = %d bluegpio num = %d\r\n", gpioled.rLEd,gpioled.gLEd,gpioled.bLEd);
  154.         return -EINVAL;
  155.     }

  156.     ret = gpio_request(gpioled.rLEd,"rgb_led_red");
  157.     ret = gpio_request(gpioled.gLEd,"rgb_led_green");
  158.     ret = gpio_request(gpioled.bLEd,"rgb_led_blue");
  159.     /* 3、设置GPIO为输出, 并默认关闭LED */
  160.     ret = gpio_direction_output(gpioled.rLEd, 1);
  161.     if(ret < 0)
  162.     {
  163.         printk("can't set red LED GPIO direction!\r\n");
  164.         return ret;
  165.     }
  166.    
  167.     ret = gpio_direction_output(gpioled.gLEd, 1);
  168.     if(ret < 0)
  169.     {
  170.         printk("can't set green LED GPIO direction!\r\n");
  171.         return ret;
  172.     }

  173.     ret = gpio_direction_output(gpioled.bLEd, 1);
  174.     if(ret < 0)
  175.     {
  176.         printk("can't set blue LED GPIO direction!\r\n");
  177.         return ret;
  178.     }

  179.     printk("gpio-set Done!\r\n");
  180.    
  181.     return 0;
  182. }

  183. /*
  184. * @description   : 驱动出口函数
  185. * @param         : 无
  186. * @return        : 0 成功;其他 失败
  187. */
  188. static int __init gpioled_init(void)
  189. {
  190.     /* 初始化LED */
  191.     int ret = gpioled_hardware_init();
  192.   
  193.     if(ret < 0)
  194.     {   
  195.         printk("gpioInit_Faild!\r\n");
  196.         return ret;
  197.     }
  198.     printk("gpio-initDone!\r\n");
  199.     /* 注册字符设备驱动 */
  200.     /* 1、创建设备号 */

  201.     if (gpioled.major) /* 定义了设备号 */
  202.     {
  203.         gpioled.devid = MKDEV(gpioled.major, 0);
  204.         register_chrdev_region(gpioled.devid, GPIOLED_CNT, GPIOLED_NAME);
  205.     }
  206.     else /* 没有定义设备号 */
  207.     {
  208.         alloc_chrdev_region(&gpioled.devid, 0, GPIOLED_CNT, GPIOLED_NAME);    /* 申请设备号 */
  209.         gpioled.major = MAJOR(gpioled.devid);    /* 获取分配号的主设备号 */
  210.         gpioled.minor = MINOR(gpioled.devid);    /* 获取分配号的次设备号 */
  211.     }
  212.     printk("device number get!\r\n");
  213.     printk("gpioled major=%d,minor=%d\n",gpioled.major, gpioled.minor);   
  214.    
  215.     /* 2、初始化cdev */
  216.     gpioled.cdev.owner = THIS_MODULE;
  217.     cdev_init(&gpioled.cdev, &gpioled_fops);
  218.      printk("cdev-initDone!\r\n");
  219.     /* 3、添加一个cdev */
  220.     cdev_add(&gpioled.cdev, gpioled.devid, GPIOLED_CNT);

  221.     /* 4、创建类 */
  222.     gpioled.class = class_create(THIS_MODULE, GPIOLED_NAME);
  223.     if (IS_ERR(gpioled.class))
  224.     {
  225.         return PTR_ERR(gpioled.class);
  226.     }
  227.      printk("device_class-initDone!\r\n");
  228.     /* 5、创建设备 */
  229.     gpioled.device = device_create(gpioled.class, NULL, gpioled.devid, NULL, GPIOLED_NAME);
  230.     if (IS_ERR(gpioled.device))
  231.     {
  232.         return PTR_ERR(gpioled.device);
  233.     }
  234.      printk("createDevice-initDone!\r\n");
  235.     printk("gpioled init done!\n");
  236.     return 0;
  237. }

  238. /*
  239. * @description   : 驱动出口函数
  240. * @param         : 无
  241. * @return        : 无
  242. */
  243. static void __exit gpioled_exit(void)
  244. {
  245.     /* 注销字符设备驱动 */
  246.     cdev_del(&gpioled.cdev);/*  删除cdev */
  247.     unregister_chrdev_region(gpioled.devid, GPIOLED_CNT); /* 注销设备号 */

  248.     device_destroy(gpioled.class, gpioled.devid);
  249.     class_destroy(gpioled.class);
  250.    
  251.     printk("gpioled exit done!\n");
  252. }

  253. /*
  254. * 将上面两个函数指定为驱动的入口和出口函数
  255. */
  256. module_init(gpioled_init);
  257. module_exit(gpioled_exit);

  258. /*
  259. * LICENSE和作者信息
  260. */
  261. MODULE_LICENSE("GPL");
  262. MODULE_AUTHOR("zzlyang");
复制代码


这是我的设备树文件
  1. /*
  2. * Copyright (C) 2016 Freescale Semiconductor, Inc.
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. */

  8. /dts-v1/;

  9. #include <dt-bindings/input/input.h>
  10. #include "imx6ull.dtsi"

  11. / {       
  12.         model = "Freescale i.MX6 ULL 14x14 EVK Board";
  13.         compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";

  14.         chosen {
  15.                 stdout-path = &uart1;
  16.         };

  17.         memory {
  18.                 reg = <0x80000000 0x20000000>;
  19.         };

  20.         reserved-memory {
  21.                 #address-cells = <1>;
  22.                 #size-cells = <1>;
  23.                 ranges;

  24.                 linux,cma {
  25.                         compatible = "shared-dma-pool";
  26.                         reusable;
  27.                         size = <0x14000000>;
  28.                         linux,cma-default;
  29.                 };
  30.         };

  31.         backlight {
  32.                 compatible = "pwm-backlight";
  33.                 pwms = <&pwm1 0 1000000>;
  34.                 brightness-levels = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100>;
  35.                 default-brightness-level = <90>;
  36.                 status = "okay";
  37.         };

  38.         pxp_v4l2 {
  39.                 compatible = "fsl,imx6ul-pxp-v4l2", "fsl,imx6sx-pxp-v4l2", "fsl,imx6sl-pxp-v4l2";
  40.                 status = "okay";
  41.         };

  42.         regulators {
  43.                 compatible = "simple-bus";
  44.                 #address-cells = <1>;
  45.                 #size-cells = <0>;

  46.                 reg_can_3v3: regulator@0 {
  47.                         compatible = "regulator-fixed";
  48.                         reg = <0>;
  49.                         regulator-name = "can-3v3";
  50.                         regulator-min-microvolt = <3300000>;
  51.                         regulator-max-microvolt = <3300000>;
  52.                         /*gpios = <&gpio_spi 3 GPIO_ACTIVE_LOW>;*/
  53.                 };

  54.                 reg_wifi_vmmc: regulator@1 {
  55.                         compatible = "regulator-fixed";
  56.                         regulator-name = "WIFI_3V3";
  57.                         regulator-min-microvolt = <3300000>;
  58.                         regulator-max-microvolt = <3300000>;
  59.                         gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
  60.                         enable-active-high;
  61.                 };
  62.                 reg_vref_3v3: regulator@2 {
  63.                         compatible = "regulator-fixed";
  64.                         regulator-name = "vref-3v3";
  65.                         regulator-min-microvolt = <3300000>;
  66.                         regulator-max-microvolt = <3300000>;
  67.                 };
  68. /*
  69.                 reg_gpio_dvfs: regulator-gpio {
  70.                         compatible = "regulator-gpio";
  71.                         pinctrl-names = "default";
  72.                         pinctrl-0 = <&pinctrl_dvfs>;
  73.                         regulator-min-microvolt = <1300000>;
  74.                         regulator-max-microvolt = <1400000>;
  75.                         regulator-name = "gpio_dvfs";
  76.                         regulator-type = "voltage";
  77.                         gpios = <&gpio5 3 GPIO_ACTIVE_HIGH>;
  78.                         states = <1300000 0x1 1400000 0x0>;
  79.                 };

  80.                 reg_bt: regulator-bt-reg {
  81.                         compatible = "regulator-gpio";
  82.                         pinctrl-names = "default";
  83.                         pinctrl-0 = <&pinctrl_dvfs>;
  84.                         regulator-min-microvolt = <1300000>;
  85.                         regulator-max-microvolt = <1400000>;
  86.                         regulator-name = "gpio_dvfs";
  87.                         regulator-type = "voltage";
  88.                         gpios = <&gpio5 3 GPIO_ACTIVE_HIGH>;
  89.                         states = <1300000 0x1 1400000 0x0>;
  90.                 };*/
  91.         };
  92.         /*
  93.         leds {
  94.                 compatible = "gpio-leds";
  95.                 pinctrl-names = "default";
  96.                 pinctrl-0 = <&pinctrl_led>;

  97.                 led0: cpu {
  98.                         label = "cpu";
  99.                 //        gpios = <&gpio5 3 GPIO_ACTIVE_HIGH>;
  100.                         default-state = "off";
  101.                         linux,default-trigger = "heartbeat";
  102.                 };
  103.         };
  104.         */
  105.         /*
  106.         pwm_leds{
  107.                 compatible = "pwm-leds";
  108.                 status = "okay";

  109.                 red {
  110.                         label = "red";
  111.                         active-low;
  112.                         pwms = <&pwm3 0 5000>;
  113.                         max-brightness = <255>;
  114.                 };

  115.                 blue {
  116.                         label =  "blue";
  117.                         active-low;
  118.                         pwms = <&pwm7 0 5000>;
  119.                         max-brightness = <255>;
  120.                 };

  121.                 green {
  122.                         label = "green";
  123.                         active-low;
  124.                         pwms = <&pwm8 0 5000>;
  125.                         max-brightness = <255>;
  126.                 };
  127.         };
  128.         */
  129.         ir_recv:ir-receiver {
  130.                         compatible = "gpio-ir-receiver";
  131.                         #gpio-cells = <1>;
  132.                         gpios = <&gpio1 21 GPIO_ACTIVE_LOW>;
  133.                         pinctrl-names = "default";
  134.                         pinctrl-0 = <&pinctrl_remote_control>;
  135.                         linux,rc-map-name = "rc-lirc";
  136.                         status = "okay";
  137.         };
  138.         /*
  139.         gpio-keys {
  140.                         compatible = "gpio-keys";
  141.                         pinctrl-names = "default";
  142.                         pinctrl-0 = <&pinctrl_gpio_keys>;

  143.                         Key0{
  144.                                 label = "Key 0";
  145.                                 gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>;
  146.                                 linux,code = <KEY_0>;
  147.                 };
  148.         };
  149.         */
  150.         sound {
  151.                 compatible = "fsl,imx6ul-evk-wm8960",
  152.                            "fsl,imx-audio-wm8960";
  153.                 model = "wm8960-audio";
  154.                 cpu-dai = <&sai2>;
  155.                 audio-codec = <&codec>;
  156.                 asrc-controller = <&asrc>;
  157.                 codec-master;
  158.                 gpr = <&gpr 4 0x100000 0x100000>;
  159.                 /*
  160.                  * hp-det = <hp-det-pin hp-det-polarity>;
  161.                  * hp-det-pin: JD1 JD2  or JD3
  162.                  * hp-det-polarity = 0: hp detect high for headphone
  163.                  * hp-det-polarity = 1: hp detect high for speaker
  164.                  */
  165.                 hp-det = <3 1>;
  166.                 /*hp-det-gpios = <&gpio5 4 0>;
  167.                 mic-det-gpios = <&gpio5 4 0>;*/
  168.                 audio-routing =
  169.                         "Headphone Jack", "HP_L",
  170.                         "Headphone Jack", "HP_R",
  171.                         "Ext Spk", "SPK_LP",
  172.                         "Ext Spk", "SPK_LN",
  173.                         "Ext Spk", "SPK_RP",
  174.                         "Ext Spk", "SPK_RN",
  175.                         "LINPUT2", "Mic Jack",
  176.                         "LINPUT3", "Mic Jack",
  177.                         "RINPUT1", "Main MIC",
  178.                         "RINPUT2", "Main MIC",
  179.                         "Mic Jack", "MICB",
  180.                         "Main MIC", "MICB",
  181.                         "CPU-Playback", "ASRC-Playback",
  182.                         "Playback", "CPU-Playback",
  183.                         "ASRC-Capture", "CPU-Capture",
  184.                         "CPU-Capture", "Capture";
  185.                         status = "okay";
  186.         };

  187.         spi4 {
  188.                 compatible = "spi-gpio";
  189.                 pinctrl-names = "default";
  190.                 pinctrl-0 = <&pinctrl_spi4>;
  191.                 pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
  192.                 status = "okay";
  193.                 gpio-sck = <&gpio5 11 0>;
  194.                 gpio-mosi = <&gpio5 10 0>;
  195.                 cs-gpios = <&gpio5 7 0>;
  196.                 num-chipselects = <1>;
  197.                 #address-cells = <1>;
  198.                 #size-cells = <0>;

  199.                 gpio_spi: gpio_spi@0 {
  200.                         compatible = "fairchild,74hc595";
  201.                         gpio-controller;
  202.                         #gpio-cells = <2>;
  203.                         reg = <0>;
  204.                         registers-number = <1>;
  205.                         registers-default = /bits/ 8 <0x57>;
  206.                         spi-max-frequency = <100000>;
  207.                 };
  208.         };

  209.         sound-spdif {
  210.                 compatible = "fsl,imx-audio-spdif";
  211.                 model = "imx-spdif";
  212.                 spdif-controller = <&spdif>;
  213.                 spdif-in;
  214.                 spdif-out;
  215.         };

  216.         sii902x_reset: sii902x-reset {
  217.                 compatible = "gpio-reset";
  218.                 reset-gpios = <&gpio_spi 0 GPIO_ACTIVE_LOW>;
  219.                 reset-delay-us = <100000>;
  220.                 #reset-cells = <0>;
  221.         };

  222.         ds18b20{
  223.                 compatible = "w1-gpio";
  224.                 gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
  225.                 linux,open-drain;
  226.                 pinctrl-names = "default";
  227.                 pinctrl-0 = <&pinctrl_onewire>;
  228.                 status = "disable";
  229.         };

  230.         dht11{
  231.                 compatible = "dht11";
  232.                 gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
  233.                 linux,open-drain;
  234.                 pinctrl-names = "default";
  235.                 pinctrl-0 = <&pinctrl_onewire>;
  236.                 status = "okay";
  237.         };
  238.        
  239.         oled {
  240.                 compatible = "sh1106";
  241.                 #address-cells = <1>;
  242.                 #size-cells = <0>;
  243.                 reg = <0x4001b8b0 0x00000004>;
  244.                 status = "okay";
  245.                
  246.         };
  247.         beep {
  248.         #address-cells = <1>;
  249.                 #size-cells = <1>;
  250.             compatible="beep";
  251.             status = "okay";
  252.         reg=<0x20c406C 0x04
  253.              0x20E0000 0X04
  254.              0X20E031C 0X04
  255.              0X209C000 0X04
  256.              0X209C004 0X04 >;            
  257.         };  
  258.        
  259.        
  260.         gpioled{
  261.                 compatible = "gpioled";
  262.                 pinctrl-names = "default";
  263.                 pinctrl-0 = <&pinctrl_gpioled>;
  264.                 led-gpio = <&gpio5 3 GPIO_ACTIVE_LOW>;        //低电平有效
  265.                 status = "okay";
  266.         };
  267.        
  268.        
  269.         myled{
  270.                 #address-cells = <1>;
  271.                 #size-cells = <1>;
  272.                 compatible = "myboard-led";
  273.                 status = "okay";
  274.                 reg = < 0X020C406C 0x04    /*CCM_CCGR1_BASE*/       
  275.                 0X02290014 0x04    /*SW_MUX_SNVS_TAMPER3_BASE*/
  276.                                 0X02290058 0x04    /*SW_PAD_SNVS_TAMPER3_BASE*/
  277.                                 0X020AC000 0x04    /*GPIO5_DR_BASE*/
  278.                                 0X020AC004 0x04 >; /*GPIO5_GDIR_BASE*/
  279.         };
  280.        
  281.         gpiobeep{
  282.                 compatible = "gpiobeep";
  283.                 pinctrl-names = "default";
  284.                 pinctrl-0 = <&pinctrl_beep>;
  285.                 beep-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
  286.                 status = "okay";
  287.         };
  288.        
  289.         swkey {
  290.                 #address-cells = <1>;
  291.                 #size-cells = <1>;
  292.                 compatible = "myboard-key";
  293.                 pinctrl-names = "default";
  294.                 pinctrl-0 = <&pinctrl_key>;
  295.                 key1-gpio = <&gpio5 1 GPIO_ACTIVE_HIGH>;   /* SW2 */
  296.                 key2-gpio = <&gpio5 11 GPIO_ACTIVE_LOW>;   /* SW4 */
  297.                 status = "okay";
  298.         };
  299.        
  300.         rgb_led{
  301.                 #address-cells = <1>;
  302.                 #size-cells = <1>;
  303.                 pinctrl-name = "default";
  304.                 compatible = "rgb-led";
  305.                 pinctrl-0 = <&pinctrl_rgb_led>;
  306.                 rgb_led_red = <&gpio1 4 GPIO_ACTIVE_LOW>;
  307.                 rgb_led_green = <&gpio4 20 GPIO_ACTIVE_LOW>;
  308.                 rgb_led_blue = <&gpio4 19 GPIO_ACTIVE_LOW>;
  309.                 status = "okay";
  310.         };
  311. };



  312. &cpu0 {
  313.         arm-supply = <®_arm>;
  314.         soc-supply = <®_soc>;
  315.         clock-frequency = <800000000>;
  316.         /*dc-supply = <®_gpio_dvfs>;*/
  317. };

  318. &clks {
  319.         assigned-clocks = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
  320.         assigned-clock-rates = <786432000>;
  321. };

  322. &fec1 {
  323.         pinctrl-names = "default";
  324.         pinctrl-0 = <&pinctrl_enet1>;
  325.         phy-mode = "rmii";
  326.         phy-handle = <ðphy0>;
  327.         status = "okay";
  328. };

  329. &fec2 {
  330.         pinctrl-names = "default";
  331.         pinctrl-0 = <&pinctrl_enet2>;
  332.         phy-mode = "rmii";
  333.         phy-handle = <ðphy1>;
  334.         status = "okay";

  335.         mdio {
  336.                 #address-cells = <1>;
  337.                 #size-cells = <0>;

  338.                 ethphy0: ethernet-phy@2 {
  339.                         compatible = "ethernet-phy-ieee802.3-c22";
  340.                         reg = <2>;
  341.                 };

  342.                 ethphy1: ethernet-phy@1 {
  343.                         compatible = "ethernet-phy-ieee802.3-c22";
  344.                         reg = <1>;
  345.                 };
  346.         };
  347. };

  348. &flexcan1 {
  349.         pinctrl-names = "default";
  350.         pinctrl-0 = <&pinctrl_flexcan1>;
  351.         /*xceiver-supply = <®_can_3v3>;*/
  352.         status = "okay";
  353. };
  354. /*
  355. &flexcan2 {
  356.         pinctrl-names = "default";
  357.         pinctrl-0 = <&pinctrl_flexcan2>;
  358.         /*xceiver-supply = <®_can_3v3>;
  359.         status = "okay";    /*can & UART2 can not use as same time
  360. };*/

  361. &gpc {
  362.         fsl,cpu_pupscr_sw2iso = <0x1>;
  363.         fsl,cpu_pupscr_sw = <0x0>;
  364.         fsl,cpu_pdnscr_iso2sw = <0x1>;
  365.         fsl,cpu_pdnscr_iso = <0x1>;
  366.         fsl,ldo-bypass = <0>; /* DCDC, ldo-enable */
  367. };

  368. &i2c1 {
  369.         clock-frequency = <100000>;
  370.         pinctrl-names = "default";
  371.         pinctrl-0 = <&pinctrl_i2c1>;
  372.         status = "okay";

  373.         mpu6050@68 {
  374.                 compatible = "mpu6050,INV_MPU6050";
  375.                 reg = <0x68>;
  376.                 position = <1>;
  377.         };

  378.         gt9xx@5d {
  379.                 compatible = "goodix,gt9xx";
  380.                 reg = <0x5d>;
  381.                 status = "okay";
  382.                 interrupt-parent = <&gpio5>;
  383.                 interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
  384.                 pinctrl-names = "pinctrl_tsc_reset","pinctrl_tsc_irq";
  385.                 pinctrl-0 = <&pinctrl_tsc_reset>;
  386.                 pinctrl-1 = <&pinctrl_tsc_irq>;
  387.                 /*pinctrl-names = "default", "int-output-low", "int-output-high", "int-input";
  388.                 pinctrl-0 = <&ts_int_default>;
  389.                 pinctrl-1 = <&ts_int_output_low>;
  390.                 pinctrl-2 = <&ts_int_output_high>;
  391.                 pinctrl-3 = <&ts_int_input>;
  392.                 */
  393.                 reset-gpios = <&gpio3 4 GPIO_ACTIVE_LOW>;
  394.                 irq-gpios = <&gpio5 9 IRQ_TYPE_EDGE_FALLING>;
  395.                 irq-flags = <2>;                /*1:rising 2: falling*/

  396.                 touchscreen-max-id = <1>;
  397.                 touchscreen-size-x = <800>;
  398.                 touchscreen-size-y = <480>;
  399.                 touchscreen-max-w = <1024>;
  400.                 touchscreen-max-p = <1024>;
  401.                 /*touchscreen-key-map = <172>, <158>;*/ /*KEY_HOMEPAGE, KEY_BACK*/

  402.                 goodix,type-a-report = <0>;
  403.                 goodix,driver-send-cfg = <0>;
  404.                 goodix,create-wr-node = <1>;
  405.                 goodix,wakeup-with-reset = <0>;
  406.                 goodix,resume-in-workqueue = <0>;
  407.                 goodix,int-sync = <1>;
  408.                 goodix,swap-x2y = <0>;
  409.                 goodix,esd-protect = <0>;
  410.                 goodix,pen-suppress-finger = <0>;
  411.                 goodix,auto-update = <0>;
  412.                 goodix,auto-update-cfg = <0>;
  413.                 goodix,power-off-sleep = <0>;

  414.                 /*7*/
  415.                 goodix,cfg-group0 = [
  416.                 00 20 03 E0 01 05 0D 00 01 08
  417.                 28 0F 50 32 03 05 00 00 00 00
  418.                 00 00 00 00 00 00 00 8A 2A 0C
  419.                 45 47 0C 08 00 00 00 02 02 2D
  420.                 00 00 00 00 00 03 64 32 00 00
  421.                 00 28 64 94 C5 02 07 00 00 04
  422.                 9C 2C 00 8F 34 00 84 3F 00 7C
  423.                 4C 00 77 5B 00 77 00 00 00 00
  424.                 00 00 00 00 00 00 00 00 00 00
  425.                 00 00 00 00 00 00 00 00 00 00
  426.                 00 00 00 00 00 00 00 00 00 00
  427.                 00 00 18 16 14 12 10 0E 0C 0A
  428.                 08 06 04 02 FF FF 00 00 00 00
  429.                 00 00 00 00 00 00 00 00 00 00
  430.                 00 00 16 18 1C 1D 1E 1F 20 21
  431.                 22 24 13 12 10 0F 0A 08 06 04
  432.                 02 00 FF FF FF FF FF FF 00 00
  433.                 00 00 00 00 00 00 00 00 00 00
  434.                 00 00 00 00 24 01
  435.                 ];

  436.                 /*4.3*/
  437.                 goodix,cfg-group1 = [
  438.                 97 E0 01 10 01 05 0D 00 01 00
  439.                 00 05 5A 46 53 11 00 00 11 11
  440.                 14 14 14 22 0A 04 00 00 00 00
  441.                 00 00 53 00 14 00 00 84 00 00
  442.                 3C 00 00 64 1E 28 87 27 08 32
  443.                 34 05 0D 20 33 60 11 02 24 00
  444.                 00 64 80 80 14 02 00 00 54 89
  445.                 68 85 6D 82 72 80 76 7D 7B 7B
  446.                 00 00 00 00 00 00 00 F0 50 3C
  447.                 FF FF 07 00 00 00 02 14 14 03
  448.                 04 00 21 64 0A 00 00 00 00 00
  449.                 00 00 00 00 00 00 00 00 00 00
  450.                 00 00 00 00 00 00 00 00 00 00
  451.                 32 20 50 3C 3C 00 00 00 00 00
  452.                 0D 06 0C 05 0B 04 0A 03 FF FF
  453.                 FF FF FF FF 00 01 02 03 04 05
  454.                 06 07 08 09 0A 0B 0C 0D FF FF
  455.                 FF FF FF FF FF FF FF FF FF FF
  456.                 00 00 00 00 00 00 00 00 00 00
  457.                 00 00 00 00 3C 00 05 1E 00 02
  458.                 2A 1E 19 14 02 00 03 0A 05 00
  459.                 00 00 00 00 00 00 01 FF FF 86
  460.                 22 03 00 00 33 00 0F 00 00 00
  461.                 50 3C 50 00 00 00 00 2A 01
  462.                 ];

  463.                 /*5*/
  464.                 goodix,cfg-group2 = [
  465.                 00 20 03 E0 01 05 3C 00 01 08
  466.                 28 0C 50 32 03 05 00 00 00 00
  467.                 00 00 00 17 19 1E 14 8B 2B 0D
  468.                 33 35 0C 08 00 00 00 9A 03 11
  469.                 00 01 00 00 00 00 00 32 00 00
  470.                 00 20 58 94 C5 02 00 00 00 04
  471.                 B0 23 00 93 2B 00 7B 35 00 69
  472.                 41 00 5B 4F 00 5B 00 00 00 00
  473.                 00 00 00 00 00 00 00 00 00 00
  474.                 00 00 00 00 00 00 00 00 00 00
  475.                 00 00 00 00 00 00 00 00 00 00
  476.                 00 00 02 04 06 08 0A 0C 0E 10
  477.                 12 14 16 18 1A FF 00 00 00 00
  478.                 00 00 00 00 00 00 00 00 00 00
  479.                 00 00 00 02 04 06 08 0A 0C 0F
  480.                 10 12 13 16 18 1C 1D 1E 1F 20
  481.                 21 22 24 26 FF FF FF FF 00 00
  482.                 00 FF FF FF FF FF FF FF FF FF
  483.                 FF FF FF FF 48 01
  484.                 ];

  485.         };
  486.         /*
  487.         mag3110@0e {
  488.                 compatible = "fsl,mag3110";
  489.                 reg = <0x0e>;
  490.                 position = <2>;
  491.         };

  492.         fxls8471@1e {
  493.                 compatible = "fsl,fxls8471";
  494.                 reg = <0x1e>;
  495.                 position = <0>;
  496.                 interrupt-parent = <&gpio5>;
  497.                 interrupts = <0 8>;
  498.         };*/
  499. };

  500. &i2c2 {
  501.         clock_frequency = <100000>;
  502.         pinctrl-names = "default";
  503.         pinctrl-0 = <&pinctrl_i2c2>;
  504.         status = "okay";

  505.         codec: wm8960@1a {
  506.                 compatible = "wlf,wm8960";
  507.                 reg = <0x1a>;
  508.                 clocks = <&clks IMX6UL_CLK_SAI2>;
  509.                 clock-names = "mclk";
  510.                 wlf,shared-lrclk;
  511.         };

  512.         sii902x: sii902x@39 {
  513.                 compatible = "SiI,sii902x";
  514.                 pinctrl-names = "default";
  515.                 reset-names="sii902x";
  516.                 pinctrl-0 = <&pinctrl_sii902x>;
  517.                 resets = <&sii902x_reset>;
  518.                 interrupt-parent = <&gpio1>;
  519.                 interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
  520.                 mode_str ="1280x720M@60";
  521.                 bits-per-pixel = <16>;
  522.                 reg = <0x39>;
  523.                 status = "okay";    /* HDMI 使能 */
  524.         };

  525.         ov5640: ov5640@3c {
  526.                 compatible = "ovti,ov5640";
  527.                 reg = <0x3c>;
  528.                 pinctrl-names = "default";
  529.                 pinctrl-0 = <&pinctrl_csi1>;
  530.                 clocks = <&clks IMX6UL_CLK_CSI>;
  531.                 clock-names = "csi_mclk";
  532.                 pwn-gpios = <&gpio_spi 6 1>;
  533.                 rst-gpios = <&gpio_spi 5 0>;
  534.                 csi_id = <0>;
  535.                 mclk = <24000000>;
  536.                 mclk_source = <0>;
  537.                 status = "disable";    /* 摄像头使能 */
  538.                 port {
  539.                         ov5640_ep: endpoint {
  540.                                 remote-endpoint = <&csi1_ep>;
  541.                         };
  542.                 };
  543.         };
  544. };

  545. &csi {
  546.         status = "disable";  /* 摄像头总线使能 */

  547.         port {
  548.                 csi1_ep: endpoint {
  549.                         remote-endpoint = <&ov5640_ep>;
  550.                 };
  551.         };
  552. };

  553. &iomuxc {
  554.         pinctrl-names = "default";
  555.         imx6ul-evk {
  556.                 pinctrl_gpmi_nand: gpmi-nand {
  557.                         fsl,pins = <
  558.                                 MX6UL_PAD_NAND_CLE__RAWNAND_CLE         0xb0b1
  559.                                 MX6UL_PAD_NAND_ALE__RAWNAND_ALE         0xb0b1
  560.                                 MX6UL_PAD_NAND_WP_B__RAWNAND_WP_B       0xb0b1
  561.                                 MX6UL_PAD_NAND_READY_B__RAWNAND_READY_B 0xb000
  562.                                 MX6UL_PAD_NAND_CE0_B__RAWNAND_CE0_B     0xb0b1
  563.                                 MX6UL_PAD_NAND_CE1_B__RAWNAND_CE1_B     0xb0b1
  564.                                 MX6UL_PAD_NAND_RE_B__RAWNAND_RE_B       0xb0b1
  565.                                 MX6UL_PAD_NAND_WE_B__RAWNAND_WE_B       0xb0b1
  566.                                 MX6UL_PAD_NAND_DATA00__RAWNAND_DATA00   0xb0b1
  567.                                 MX6UL_PAD_NAND_DATA01__RAWNAND_DATA01   0xb0b1
  568.                                 MX6UL_PAD_NAND_DATA02__RAWNAND_DATA02   0xb0b1
  569.                                 MX6UL_PAD_NAND_DATA03__RAWNAND_DATA03   0xb0b1
  570.                                 MX6UL_PAD_NAND_DATA04__RAWNAND_DATA04   0xb0b1
  571.                                 MX6UL_PAD_NAND_DATA05__RAWNAND_DATA05   0xb0b1
  572.                                 MX6UL_PAD_NAND_DATA06__RAWNAND_DATA06   0xb0b1
  573.                                 MX6UL_PAD_NAND_DATA07__RAWNAND_DATA07   0xb0b1
  574.                         >;
  575.                 };
  576.                 pinctrl_remote_control: remote_control {
  577.                         fsl,pins = <
  578.                                 MX6UL_PAD_UART2_RX_DATA__GPIO1_IO21        0x000010B1 /* remote control        add by pengjie 20190703*/
  579.                         >;
  580.                 };

  581.                 pinctrl_csi1: csi1grp {
  582.                         fsl,pins = <
  583.                                 MX6UL_PAD_CSI_MCLK__CSI_MCLK                0x1b088
  584.                                 MX6UL_PAD_CSI_PIXCLK__CSI_PIXCLK        0x1b088
  585.                                 MX6UL_PAD_CSI_VSYNC__CSI_VSYNC                0x1b088
  586.                                 MX6UL_PAD_CSI_HSYNC__CSI_HSYNC                0x1b088
  587.                                 MX6UL_PAD_CSI_DATA00__CSI_DATA02        0x1b088
  588.                                 MX6UL_PAD_CSI_DATA01__CSI_DATA03        0x1b088
  589.                                 MX6UL_PAD_CSI_DATA02__CSI_DATA04        0x1b088
  590.                                 MX6UL_PAD_CSI_DATA03__CSI_DATA05        0x1b088
  591.                                 MX6UL_PAD_CSI_DATA04__CSI_DATA06        0x1b088
  592.                                 MX6UL_PAD_CSI_DATA05__CSI_DATA07        0x1b088
  593.                                 MX6UL_PAD_CSI_DATA06__CSI_DATA08        0x1b088
  594.                                 MX6UL_PAD_CSI_DATA07__CSI_DATA09        0x1b088
  595.                         >;
  596.                 };

  597.                 pinctrl_enet1: enet1grp {
  598.                         fsl,pins = <
  599.                                 MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN        0x1b0b0
  600.                                 MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER        0x1b0b0
  601.                                 MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00        0x1b0b0
  602.                                 MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01        0x1b0b0
  603.                                 MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN        0x1b0b0
  604.                                 MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00        0x1b0b0
  605.                                 MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01        0x1b0b0
  606.                                 MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1        0x4001b031
  607.                         >;
  608.                 };

  609.                 pinctrl_enet2: enet2grp {
  610.                         fsl,pins = <
  611.                                 MX6UL_PAD_GPIO1_IO07__ENET2_MDC                0x1b0b0
  612.                                 MX6UL_PAD_GPIO1_IO06__ENET2_MDIO        0x1b0b0
  613.                                 MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN        0x1b0b0
  614.                                 MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER        0x1b0b0
  615.                                 MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00        0x1b0b0
  616.                                 MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01        0x1b0b0
  617.                                 MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN        0x1b0b0
  618.                                 MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00        0x1b0b0
  619.                                 MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01        0x1b0b0
  620.                                 MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2        0x4001b031
  621.                         >;
  622.                 };

  623.                 pinctrl_flexcan1: flexcan1grp{
  624.                         fsl,pins = <
  625.                                 MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX        0x1b020
  626.                                 MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX        0x1b020
  627.                         >;
  628.                 };

  629.                 pinctrl_flexcan2: flexcan2grp{
  630.                         fsl,pins = <
  631.                                 MX6UL_PAD_UART2_RTS_B__FLEXCAN2_RX        0x1b020
  632.                                 MX6UL_PAD_UART2_CTS_B__FLEXCAN2_TX        0x1b020
  633.                         >;
  634.                 };

  635.                 pinctrl_i2c1: i2c1grp {
  636.                         fsl,pins = <
  637.                                 MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
  638.                                 MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
  639.                         >;
  640.                 };

  641.                 pinctrl_i2c2: i2c2grp {
  642.                         fsl,pins = <
  643.                                 MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
  644.                                 MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
  645.                         >;
  646.                 };

  647.                 pinctrl_lcdif_dat: lcdifdatgrp {
  648.                         fsl,pins = <
  649.                                 MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
  650.                                 MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
  651.                                 MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
  652.                                 MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
  653.                                 MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
  654.                                 MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
  655.                                 MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
  656.                                 MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
  657.                                 MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
  658.                                 MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
  659.                                 MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79
  660.                                 MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
  661.                                 MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
  662.                                 MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
  663.                                 MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
  664.                                 MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
  665.                                 MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
  666.                                 MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
  667.                                 MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
  668.                                 MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
  669.                                 MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
  670.                                 MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
  671.                                 MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
  672.                                 MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79
  673.                         >;
  674.                 };

  675.                 pinctrl_lcdif_ctrl: lcdifctrlgrp {
  676.                         fsl,pins = <
  677.                                 MX6UL_PAD_LCD_CLK__LCDIF_CLK            0x79
  678.                                 MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x79
  679.                                 MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x79
  680.                                 MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x79
  681.                         >;
  682.                 };

  683.                 pinctrl_pwm1: pwm1grp {
  684.                         fsl,pins = <
  685.                                 MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x000010B1
  686.                         >;
  687.                 };

  688.                 pinctrl_pwm3: pwm3grp {
  689.                         fsl,pins = <
  690.                                 MX6UL_PAD_GPIO1_IO04__PWM3_OUT   0x000010B1
  691.                         >;
  692.                 };

  693.                 pinctrl_pwm7: pwm7grp {
  694.                         fsl,pins = <
  695.                                 MX6UL_PAD_CSI_VSYNC__PWM7_OUT   0x000010B1
  696.                         >;
  697.                 };

  698.                 pinctrl_pwm8: pwm8grp {
  699.                         fsl,pins = <
  700.                                 MX6UL_PAD_CSI_HSYNC__PWM8_OUT   0x000010B1
  701.                         >;
  702.                 };

  703.                 pinctrl_qspi: qspigrp {
  704.                         fsl,pins = <
  705.                                 MX6UL_PAD_NAND_WP_B__QSPI_A_SCLK      0x70a1
  706.                                 MX6UL_PAD_NAND_READY_B__QSPI_A_DATA00 0x70a1
  707.                                 MX6UL_PAD_NAND_CE0_B__QSPI_A_DATA01   0x70a1
  708.                                 MX6UL_PAD_NAND_CE1_B__QSPI_A_DATA02   0x70a1
  709.                                 MX6UL_PAD_NAND_CLE__QSPI_A_DATA03     0x70a1
  710.                                 MX6UL_PAD_NAND_DQS__QSPI_A_SS0_B      0x70a1
  711.                         >;
  712.                 };

  713.                 pinctrl_sai2: sai2grp {
  714.                         fsl,pins = <
  715.                                 MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK        0x17088
  716.                                 MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC        0x17088
  717.                                 MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA        0x11088
  718.                                 MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA        0x11088
  719.                                 MX6UL_PAD_JTAG_TMS__SAI2_MCLK                0x17088
  720.                         >;
  721.                 };

  722.                 pinctrl_spdif: spdifgrp {
  723.                                 fsl,pins = <
  724.                                 MX6UL_PAD_JTAG_MOD__SPDIF_OUT                0x1b0b0
  725.                                 MX6UL_PAD_GPIO1_IO09__SPDIF_IN                0x1b0b0
  726.                         >;
  727.                 };

  728.                 pinctrl_uart1: uart1grp {
  729.                         fsl,pins = <
  730.                                 MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
  731.                                 MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
  732.                         >;
  733.                 };

  734.                 pinctrl_uart2: uart2grp {
  735.                         fsl,pins = <
  736.                                 MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX        0x1b0b1
  737.                                 MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX        0x1b0b1
  738.                         >;
  739.                 };

  740.                 pinctrl_uart3: uart3grp {
  741.                         fsl,pins = <
  742.                                 MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX        0x1b0b1
  743.                                 MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX        0x1b0b1
  744.                         >;
  745.                 };

  746.                 pinctrl_uart2dte: uart2dtegrp {
  747.                         fsl,pins = <
  748.                                 MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX        0x1b0b1
  749.                                 MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX        0x1b0b1
  750.                                 /*MX6UL_PAD_UART3_RX_DATA__UART2_DCE_RTS        0x1b0b1
  751.                                 MX6UL_PAD_UART3_TX_DATA__UART2_DCE_CTS        0x1b0b1    pengjie 20190622*/
  752.                                 MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS        0x1b0b1
  753.                                 MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS        0x1b0b1
  754.                         >;
  755.                 };
  756.                 pinctrl_485: 485grp {
  757.                         fsl,pins = <
  758.                                 MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX        0x1b0b1
  759.                                 MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX        0x1b0b1
  760.                                 MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS        0x1b0b1 /* RS485 RE/DE */
  761.                         >;
  762.                 };
  763.                 pinctrl_usdhc1: usdhc1grp {
  764.                         fsl,pins = <
  765.                                 MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
  766.                                 MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x10071
  767.                                 MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
  768.                                 MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
  769.                                 MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
  770.                                 MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
  771.                         >;
  772.                 };

  773.                 pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
  774.                         fsl,pins = <
  775.                                 MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x170b9
  776.                                 MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x100b9
  777.                                 MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9
  778.                                 MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9
  779.                                 MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9
  780.                                 MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9
  781.                         >;
  782.                 };

  783.                 pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
  784.                         fsl,pins = <
  785.                                 MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x170f9
  786.                                 MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x100f9
  787.                                 MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170f9
  788.                                 MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170f9
  789.                                 MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170f9
  790.                                 MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170f9
  791.                         >;
  792.                 };

  793.                 pinctrl_usdhc2: usdhc2grp {
  794.                         fsl,pins = <
  795.                                 MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x10069
  796.                                 MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x17059
  797.                                 MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
  798.                                 MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
  799.                                 MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
  800.                                 MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
  801.                         >;
  802.                 };

  803.                 pinctrl_usdhc2_8bit: usdhc2grp_8bit {
  804.                         fsl,pins = <
  805.                                 MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x10069
  806.                                 MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x17059
  807.                                 MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x17059
  808.                                 MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x17059
  809.                                 MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x17059
  810.                                 MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x17059
  811.                                 MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x17059
  812.                                 MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x17059
  813.                                 MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x17059
  814.                                 MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x17059
  815.                         >;
  816.                 };

  817.                 pinctrl_usdhc2_8bit_100mhz: usdhc2grp_8bit_100mhz {
  818.                         fsl,pins = <
  819.                                 MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x100b9
  820.                                 MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x170b9
  821.                                 MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170b9
  822.                                 MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170b9
  823.                                 MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170b9
  824.                                 MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170b9
  825.                                 MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170b9
  826.                                 MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170b9
  827.                                 MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170b9
  828.                                 MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170b9
  829.                         >;
  830.                 };

  831.                 pinctrl_usdhc2_8bit_200mhz: usdhc2grp_8bit_200mhz {
  832.                         fsl,pins = <
  833.                                 MX6UL_PAD_NAND_RE_B__USDHC2_CLK     0x100f9
  834.                                 MX6UL_PAD_NAND_WE_B__USDHC2_CMD     0x170f9
  835.                                 MX6UL_PAD_NAND_DATA00__USDHC2_DATA0 0x170f9
  836.                                 MX6UL_PAD_NAND_DATA01__USDHC2_DATA1 0x170f9
  837.                                 MX6UL_PAD_NAND_DATA02__USDHC2_DATA2 0x170f9
  838.                                 MX6UL_PAD_NAND_DATA03__USDHC2_DATA3 0x170f9
  839.                                 MX6UL_PAD_NAND_DATA04__USDHC2_DATA4 0x170f9
  840.                                 MX6UL_PAD_NAND_DATA05__USDHC2_DATA5 0x170f9
  841.                                 MX6UL_PAD_NAND_DATA06__USDHC2_DATA6 0x170f9
  842.                                 MX6UL_PAD_NAND_DATA07__USDHC2_DATA7 0x170f9
  843.                         >;
  844.                 };

  845.                 pinctrl_tsc_reset: tscresetgrp {
  846.                         fsl,pins = <
  847.                                 /* used for tsc reset */
  848.                                 MX6UL_PAD_LCD_RESET__GPIO3_IO04                0x05
  849.                         >;
  850.                 };

  851.                 pinctrl_onewire: onewire {
  852.                         fsl,pins = <
  853.                                 //MX6UL_PAD_GPIO1_IO02__GPIO1_IO02          0x000090B1     DHT11
  854.                                 MX6UL_PAD_GPIO1_IO02__GPIO1_IO02          0x400138B1
  855.                         >;
  856.                 };

  857.                 pinctrl_sii902x: hdmigrp {
  858.                         fsl,pins = <
  859.                                 MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x59
  860.                         >;
  861.                 };
  862.                
  863.                 pinctrl_gpioled: gpioledgrp {
  864.                         fsl,pins = <
  865.                                 MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03        0x010b0
  866.                         >;
  867.                 };
  868.                
  869.                 pinctrl_adc1: adc1grp{
  870.                         fsl,pins = <
  871.                                 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03      0x000010B1
  872.                         >;
  873.                 };
  874.                
  875.                 pinctrl_key: keygrp {
  876.                         fsl,pins = <
  877.                                 MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01    0x3080 /* SW2 */
  878.                                 MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11      0xF080 /* SW4 */
  879.                         >;
  880.                 };
  881.                
  882.                 pinctrl_beep: beepgrp{
  883.                         fsl,pins = <
  884.                                 MX6UL_PAD_UART1_RTS_B__GPIO1_IO19    0x000050B1
  885.                         >;
  886.                 };
  887.                
  888.                 pinctrl_rgb_led:rgb_led{
  889.                         fsl,pins = <
  890.                                 MX6UL_PAD_GPIO1_IO04__GPIO1_IO04        0x000050B1
  891.                                 MX6UL_PAD_CSI_HSYNC__GPIO4_IO20     0x000050B1
  892.                                 MX6UL_PAD_CSI_VSYNC__GPIO4_IO19     0x000050B1
  893.                 >;
  894.         };

  895.         };
  896. };

  897. &iomuxc_snvs {
  898.         pinctrl-names = "default_snvs";
  899.         pinctrl-0 = <&pinctrl_tsc_irq>;
  900.         imx6ul-evk {
  901.                 /* MPU6050   intterrupt*/
  902.                 pinctrl_hog_2: hoggrp-2 {
  903.                         fsl,pins = <
  904.                                 MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00      0x80000000
  905.                         >;
  906.                 };
  907.                 /*
  908.                 pinctrl_dvfs: dvfsgrp {
  909.                         fsl,pins = <
  910.                                 MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03        0x79
  911.                         >;
  912.                 };       
  913.                 */
  914.                 pinctrl_led: ledgrp {
  915.                         fsl,pins = <
  916.                                 MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x1b0b0
  917.                         >;
  918.                 };
  919.                 /*
  920.                 pinctrl_leds: ledsgrp {
  921.                         fsl,pins = <
  922.                         MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03        0x010b0
  923.                         >;
  924.                 };
  925.                 */
  926.                
  927.                 pinctrl_spi4: spi4grp {
  928.                         fsl,pins = <
  929.                                 MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10                0x70a1
  930.                                 MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11                0x70a1
  931.                                 MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07                0x70a1
  932.                                 MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08                0x80000000
  933.                         >;
  934.                 };
  935.                  
  936.                 pinctrl_sai2_hp_det_b: sai2_hp_det_grp {
  937.                         fsl,pins = <
  938.                                 MX6ULL_PAD_SNVS_TAMPER4__GPIO5_IO04        0x000110A1
  939.                         >;
  940.                 };

  941.                 pinctrl_tsc_irq: tsc_irq {
  942.                         fsl,pins = <
  943.                                 MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09        0x4001b8b0
  944.                         >;
  945.                 };
  946.         };
  947. };

  948. &lcdif {
  949.         pinctrl-names = "default";
  950.         pinctrl-0 = <&pinctrl_lcdif_dat
  951.                      &pinctrl_lcdif_ctrl>;
  952.         display = <&display0>;
  953.         status = "okay";

  954.         display0: display@0 {
  955.                 bits-per-pixel = <16>;
  956.                 bus-width = <24>;

  957.                 display-timings {
  958.                         native-mode = <&timing0>;

  959. /*
  960.                         timing0: timing0 {
  961.                         mode_name = "hdmi";
  962.                         clock-frequency = <27000000>;
  963.                         mode_name = "hdmi";
  964.                         clock-frequency = <27000000>;
  965.                         hactive = <1360>;
  966.                         vactive = <768>;
  967.                         hfront-porch = <8>;
  968.                         hback-porch = <4>;
  969.                         hsync-len = <41>;
  970.                         vback-porch = <4>;
  971.                         vfront-porch = <2>;
  972.                         vsync-len = <10>;

  973.                         hsync-active = <0>;
  974.                         vsync-active = <0>;
  975.                         de-active = <1>;
  976.                         pixelclk-active = <0>;
  977.                         };

  978.                         timing0: timing0 {
  979.                         mode_name = "TFT43AB";
  980.                         clock-frequency = <9000000>;
  981.                         hactive = <480>;
  982.                         vactive = <272>;
  983.                         hfront-porch = <8>;
  984.                         hback-porch = <2>;
  985.                         hsync-len = <41>;
  986.                         vback-porch = <4>;
  987.                         vfront-porch = <4>;
  988.                         vsync-len = <10>;

  989.                         hsync-active = <0>;
  990.                         vsync-active = <0>;
  991.                         de-active = <1>;
  992.                         pixelclk-active = <0>;
  993.                         };
  994. */
  995.                         timing0: timing0 {
  996.                         mode_name = "TFT50AB";
  997.                         clock-frequency = <27000000>;
  998.                         hactive = <800>;
  999.                         vactive = <480>;
  1000.                         hfront-porch = <23>;
  1001.                         hback-porch = <46>;
  1002.                         hsync-len = <1>;
  1003.                         vback-porch = <22>;
  1004.                         vfront-porch = <22>;
  1005.                         vsync-len = <1>;

  1006.                         hsync-active = <0>;
  1007.                         vsync-active = <0>;
  1008.                         de-active = <1>;
  1009.                         pixelclk-active = <0>;
  1010.                         };
  1011. /*
  1012.                         timing2: timing2 {
  1013.                         mode_name = "TFT70AB";
  1014.                         clock-frequency = <27000002>;
  1015.                         hactive = <800>;
  1016.                         vactive = <480>;
  1017.                         hfront-porch = <23>;
  1018.                         hback-porch = <46>;
  1019.                         hsync-len = <1>;
  1020.                         vback-porch = <22>;
  1021.                         vfront-porch = <22>;
  1022.                         vsync-len = <1>;

  1023.                         hsync-active = <0>;
  1024.                         vsync-active = <0>;
  1025.                         de-active = <1>;
  1026.                         pixelclk-active = <0>;
  1027.                         };
  1028. */
  1029.                 };
  1030.         };
  1031. };

  1032. &pwm1 {
  1033.         pinctrl-names = "default";
  1034.         pinctrl-0 = <&pinctrl_pwm1>;
  1035.         status = "okay";
  1036. };

  1037. &pwm3 {
  1038.         pinctrl-names = "default";
  1039.         pinctrl-0 = <&pinctrl_pwm3>;
  1040.         status = "okay";
  1041. };

  1042. &pwm7 {
  1043.         pinctrl-names = "default";
  1044.         pinctrl-0 = <&pinctrl_pwm7>;
  1045.         status = "okay";
  1046. };

  1047. &pwm8 {
  1048.         pinctrl-names = "default";
  1049.         pinctrl-0 = <&pinctrl_pwm8>;
  1050.         status = "okay";
  1051. };

  1052. &pxp {
  1053.         status = "okay";
  1054. };

  1055. /*
  1056. &qspi {
  1057.         pinctrl-names = "default";
  1058.         pinctrl-0 = <&pinctrl_qspi>;
  1059.         status = "okay";
  1060.         ddrsmp=<0>;

  1061.         flash0: n25q256a@0 {
  1062.                 #address-cells = <1>;
  1063.                 #size-cells = <1>;
  1064.                 compatible = "micron,n25q256a";
  1065.                 spi-max-frequency = <29000000>;
  1066.                 spi-nor,ddr-quad-read-dummy = <6>;
  1067.                 reg = <0>;
  1068.         };
  1069. };
  1070. */

  1071. &sai2 {
  1072.         pinctrl-names = "default";
  1073.         pinctrl-0 = <&pinctrl_sai2>;
  1074.                      /*&pinctrl_sai2_hp_det_b>;*/

  1075.         assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
  1076.                           <&clks IMX6UL_CLK_SAI2>;
  1077.         assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
  1078.         assigned-clock-rates = <0>, <12288000>;

  1079.         status = "okay";
  1080. };

  1081. &uart1 {
  1082.         pinctrl-names = "default";
  1083.         pinctrl-0 = <&pinctrl_uart1>;
  1084.         status = "okay";
  1085. };

  1086. /*
  1087. &uart2 {
  1088.         pinctrl-names = "default";
  1089.         pinctrl-0 = <&pinctrl_uart2>;
  1090.         /*fsl,uart-has-rtscts;
  1091.         /* for DTE mode, add below change
  1092.         /* fsl,dte-mode;
  1093.         /*pinctrl-0 = <&pinctrl_uart2dte>;
  1094.         status = "disable";
  1095. };*/

  1096. &uart2{
  1097.         pinctrl-names = "default";
  1098.         pinctrl-0 = <&pinctrl_485>;
  1099.         fsl,rs485-gpio-txen = <&gpio1 31 GPIO_ACTIVE_HIGH>;
  1100.         linux,rs485-enabled-at-boot-time;
  1101.         status = "disable";
  1102. };

  1103. &uart3{
  1104.         pinctrl-names = "default";
  1105.         pinctrl-0 = <&pinctrl_uart3>;
  1106.         status = "okay";
  1107. };


  1108. &usbotg1 {
  1109.         dr_mode = "otg";
  1110.         srp-disable;
  1111.         hnp-disable;
  1112.         adp-disable;
  1113.         status = "okay";
  1114. };

  1115. &usbotg2 {
  1116.         dr_mode = "host";
  1117.         disable-over-current;
  1118.         status = "okay";
  1119. };

  1120. &usbphy1 {
  1121.         tx-d-cal = <0x5>;
  1122. };

  1123. &usbphy2 {
  1124.         tx-d-cal = <0x5>;
  1125. };

  1126. &usdhc1 {
  1127.         pinctrl-names = "default", "state_100mhz", "state_200mhz";
  1128.         pinctrl-0 = <&pinctrl_usdhc1>;
  1129.         pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
  1130.         pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
  1131. /*        cd-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>; */
  1132.         no-1-8-v;
  1133.         keep-power-in-suspend;
  1134.         enable-sdio-wakeup;
  1135.         vmmc-supply = <®_wifi_vmmc>;
  1136.         status = "okay";
  1137. };

  1138. &usdhc2 {
  1139.         pinctrl-names = "default";
  1140.         pinctrl-0 = <&pinctrl_usdhc2>;
  1141.         non-removable;
  1142.         status = "disable";
  1143. };

  1144. &gpmi {
  1145.         pinctrl-names = "default";
  1146.         pinctrl-0 = <&pinctrl_gpmi_nand>;
  1147.         status = "okay";
  1148.         nand-on-flash-bbt;
  1149. };

  1150. /*
  1151. &wdog1 {
  1152.         pinctrl-names = "default";
  1153.         pinctrl-0 = <&pinctrl_wdog>;
  1154.         fsl,wdog_b;
  1155. };
  1156. */

  1157. &spdif {
  1158.         pinctrl-names = "default";
  1159.         pinctrl-0 = <&pinctrl_spdif>;
  1160.         assigned-clocks = <&clks IMX6UL_CLK_SPDIF_SEL>,
  1161.                           <&clks IMX6UL_CLK_SPDIF_PODF>;
  1162.         assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
  1163.         assigned-clock-rates = <0>, <49152000>;
  1164.         status = "okay";
  1165. };

  1166. &adc1 {
  1167.         pinctrl-names = "default";
  1168.         pinctrl-0 = <&pinctrl_adc1>;
  1169.         vref-supply = <®_vref_3v3>;
  1170.         num-channels = <4>;                         //此参数为ADC的个数
  1171.         status = "okay";
  1172. };

  1173. &gpt2 {
  1174.     status = "okay";
  1175. };
复制代码


这是我的Makefile
  1. # KERNEL_DIR=/home/zzlyang/code/ebf_linux_kernel_6ull_depth1/build_image/build
  2. KERNEL_DIR=/home/zzlyang/code/ebf_6ull_linux


  3. ARCH=arm
  4. CROSS_COMPILE=arm-linux-gnueabihf-
  5. export  ARCH  CROSS_COMPILE

  6. obj-m := leddriver.o                # 表示编译为Linux内核模块

  7. EXTRA_CFLAGS += -fno-pic -std=gnu99 -Wno-declaration-after-statement
  8. # EXTRA_CFLAGS :=-fno-pic -std=GNU99
  9. all:
  10.         $(MAKE) -C $(KERNEL_DIR) M=$(CURDIR)  modules
  11.         EXTRA_CFLAGS="$(EXTRA_CFLAGS)"
  12.         $(CROSS_COMPILE)gcc -o rgb_app  rgbapp.c
  13. .PHONY:clean copy

  14. clean:
  15.         $(MAKE) -C $(KERNEL_DIR) M=$(CURDIR) clean       

  16. copy:
  17.         sudo  cp  *.ko  /home/embedfire/workdir

复制代码
这是最后运行的结果
野火论坛202407260009333825..png

请问问题出在哪里?
  1. <div style="color: rgb(204, 204, 204); background-color: rgb(31, 31, 31); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 19px; white-space: pre;">
  2. </div>
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-8 11:29 , Processed in 0.144776 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表