当前位置:首页>学习笔记>RT1180 Switch学习笔记(2)-支持LwIP

RT1180 Switch学习笔记(2)-支持LwIP

  • 2026-03-10 00:02:05
RT1180 Switch学习笔记(2)-支持LwIP

今天先来填坑,之前讲过要将RT1180的Switch适配LwIP,一直没来得及搞。正好AE帮客户做了Demo,在这个基础上稍微修改下就可以实现在Switch上运行LwIP。

一. 选择基础工程模板

我们的基础工程是SDK中的lwip_ipv4_ipv6_echo_freertos_cm33示例,默认情况下这个demo用的是EVK板上的ENET4口对应的网口,请看下面这张图,RT1180内部其实有2个MAC:ENETC0和ENETC1,其中ENETC0是一个单独的1G MAC,另一个ENETC1接到了Switch的PORT4口:

所以这个demo就是一个单独的千兆网示例,而选择RT1180的用户往往是看重Switch功能的,虽然这个demo仅展示了单MAC的功能,但是这个示例已经集成了大部分的驱动函数,并且有一个NETC_USE_SWT宏看上去是适配Switch的开关。但是实际上这个宏开启后,默认情况下任何一个网口都不能工作,因为它调用的函数SWT_SendFrame是从kNETC_SWITCH0Port0发送的,但是PORT0对应的PHY在代码里并未初始化。

二. EP or SWT

RT1180的Switch相当的灵活,它既可以从ENETC1对应的EndPoint收发数据,也可以指定从Switch的某个指定PORT口来收发数据,NETC_USE_SWT宏对应的代码是这样处理的,如果用这种方式去适配LwIP,处理起来会比较麻烦,需要查询每个PORT口来做相应的处理,所以我们先确定目标:我们只通过EndPoint收发数据,并不对Switch的单独PORT做帧处理,这也符合一般客户的应用,它相当于把RT1180的1个MAC接到了外部的交换机上。

因为EndPoint是内部直接挂在Switch上的,这个EP是不存在link up, down的状态,所以这里在LwIP中虚拟了一个PHY驱动函数,每个函数都返回了固定的值

constphy_operations_t g_app_phy_rtl8201_ops = {.phyInit            = APP_PSEUDO_PHY_Init,                                                .phyWrite           = PSEUDO_PHY_Write,                                                .phyRead            = PSEUDO_PHY_Read,                                                .getAutoNegoStatus  = PSEUDO_PHY_GetAutoNegotiationStatus,                                                .getLinkStatus      = PSEUDO_PHY_GetLinkStatus,                                                .getLinkSpeedDuplex = PSEUDO_PHY_GetLinkSpeedDuplex,                                                .setLinkSpeedDuplex = PSEUDO_PHY_SetLinkSpeedDuplex,                                                .enableLoopback     = PSEUDO_PHY_EnableLoopback,                                                .enableLinkInterrupt= PSEUDO_PHY_EnableLinkInterrupt,                                                .clearInterrupt     = PSEUDO_PHY_ClearInterrupt};

三. 开始移植

  1. 在hardware_init.c添加BOARD_NETC_Init()函数,这个函数在board.c中是存在的,但是默认情况下没有调用

  2. 在hardware_init.c初始化EVK上所有的5个PHY,这段代码来自之前的netc_switch_cm33示例

    status_tAPP_PHY_Init(void){status_t result            = kStatus_Success;phy_config_t phy8211Config = {        .autoNeg   = true,				//yangliang        .speed     = kPHY_Speed1000M,        .duplex    = kPHY_FullDuplex,        .enableEEE = false,        .ops       = &phyrtl8211f_ops,    };phy_config_t phy8201Config = {        .autoNeg   = true,				//yangliang        .speed     = kPHY_Speed100M,        .duplex    = kPHY_FullDuplex,        .enableEEE = false,        .ops       = &phyrtl8201_ops,    };/* Reset all PHYs even some are not used in case unstable status has effect on other PHYs. *//* Reset PHY8201 for ETH4(EP), ETH0(Switch port0). Power on 150ms, reset 10ms, wait 150ms. *//* Reset PHY8211 for ETH1(Switch port1), ETH2(Switch port2), ETH3(Switch port3). Reset 10ms, wait 30ms. */    RGPIO_PinWrite(EXAMPLE_EP0_PORT_PHY_RESET_PIN, 0);    RGPIO_PinWrite(EXAMPLE_SWT_PORT0_PHY_RESET_PIN, 0);    RGPIO_PinWrite(EXAMPLE_SWT_PORT1_PHY_RESET_PIN, 0);    RGPIO_PinWrite(EXAMPLE_SWT_PORT2_PHY_RESET_PIN, 0);    RGPIO_PinWrite(EXAMPLE_SWT_PORT3_PHY_RESET_PIN, 0);    SDK_DelayAtLeastUs(10000, CLOCK_GetFreq(kCLOCK_CpuClk));    RGPIO_PinWrite(EXAMPLE_EP0_PORT_PHY_RESET_PIN, 1);    RGPIO_PinWrite(EXAMPLE_SWT_PORT0_PHY_RESET_PIN, 1);    RGPIO_PinWrite(EXAMPLE_SWT_PORT1_PHY_RESET_PIN, 1);    RGPIO_PinWrite(EXAMPLE_SWT_PORT2_PHY_RESET_PIN, 1);    RGPIO_PinWrite(EXAMPLE_SWT_PORT3_PHY_RESET_PIN, 1);    SDK_DelayAtLeastUs(150000, CLOCK_GetFreq(kCLOCK_CpuClk));#if 1/* Initialize PHY for EP. */    phy8201Config.resource = &s_phy_resource[EXAMPLE_EP0_PORT];    phy8201Config.phyAddr  = BOARD_EP0_PHY_ADDR;    result                 = APP_PHY_SetPort(EXAMPLE_EP0_PORT, &phy8201Config);if (result != kStatus_Success)    {return result;    }    result = APP_Phy8201SetUp(&s_phy_handle[EXAMPLE_EP0_PORT]);if (result != kStatus_Success)    {return result;    }#endif/* Initialize PHY for switch port0. */    phy8201Config.resource = &s_phy_resource[EXAMPLE_SWT_PORT0];    phy8201Config.phyAddr  = BOARD_SWT_PORT0_PHY_ADDR;    result                 = APP_PHY_SetPort(EXAMPLE_SWT_PORT0, &phy8201Config);if (result != kStatus_Success)    {return result;    }    result = APP_Phy8201SetUp(&s_phy_handle[EXAMPLE_SWT_PORT0]);if (result != kStatus_Success)    {return result;    }/* Initialize PHY for switch port1. */    phy8211Config.resource = &s_phy_resource[EXAMPLE_SWT_PORT1];    phy8211Config.phyAddr  = BOARD_SWT_PORT1_PHY_ADDR;    result                 = APP_PHY_SetPort(EXAMPLE_SWT_PORT1, &phy8211Config);if (result != kStatus_Success)    {return result;    }if (((1U << 2) & EXAMPLE_SWT_USED_PORT_BITMAP) != 0U)    {/* Initialize PHY for switch port2. */        phy8211Config.resource = &s_phy_resource[EXAMPLE_SWT_PORT2];        phy8211Config.phyAddr  = BOARD_SWT_PORT2_PHY_ADDR;        result                 = APP_PHY_SetPort(EXAMPLE_SWT_PORT2, &phy8211Config);if (result != kStatus_Success)        {return result;        }    }if (((1U << 3) & EXAMPLE_SWT_USED_PORT_BITMAP) != 0U)    {/* Initialize PHY for switch port3. */        phy8211Config.resource = &s_phy_resource[EXAMPLE_SWT_PORT3];        phy8211Config.phyAddr  = BOARD_SWT_PORT3_PHY_ADDR;        result                 = APP_PHY_SetPort(EXAMPLE_SWT_PORT3, &phy8211Config);if (result != kStatus_Success)        {return result;        }    }return result;}

    需要注意的是,把自协商打开了:

  3. 在hardware_init.c添加APP_PHY_GetLinkStatus和APP_PHY_GetLinkModeSpeedDuplex函数

    status_tAPP_PHY_GetLinkStatus(uint32_t port, bool *link){return PHY_GetLinkStatus(&s_phy_handle[port], link);}status_tAPP_PHY_GetLinkModeSpeedDuplex(uint32_t port,netc_hw_mii_mode_t *mode,netc_hw_mii_speed_t *speed,netc_hw_mii_duplex_t *duplex){switch (port)    {case EXAMPLE_EP0_PORT:            *mode = kNETC_RmiiMode;break;case EXAMPLE_SWT_PORT0:            *mode = kNETC_MiiMode;break;case EXAMPLE_SWT_PORT1:            *mode = kNETC_RgmiiMode;break;case EXAMPLE_SWT_PORT2:            *mode = kNETC_RgmiiMode;break;case EXAMPLE_SWT_PORT3:            *mode = kNETC_RgmiiMode;break;default:            assert(false);break;    }return PHY_GetLinkSpeedDuplex(&s_phy_handle[port], (phy_speed_t *)speed, (phy_duplex_t *)duplex);}
  4. 熟悉LwIP的小伙伴应该都知道,在初始化协议栈的时候一般只对1个PHY进行初始化,并且通过sys_timeout做1.5s周期的回调,去probe_link状态,根据phy状态的变化来切换MAC的状态,所以我们需要在ethernetif.c文件中修改ethernetif_probe_link函数:

    voidethernetif_probe_link(struct netif *netif_){status_t result = kStatus_Success;bool link       = false;staticint i = 0;netc_hw_mii_mode_t phyMode;netc_hw_mii_speed_t phySpeed;netc_hw_mii_duplex_t phyDuplex;for(i = 0; i < EXAMPLE_SWT_MAX_PORT_NUM; i++)	{		result = APP_PHY_GetLinkStatus(EXAMPLE_SWT_PORT0 + i, &link);if((result == kStatus_Success)&&(link == true))		{			result = APP_PHY_GetLinkModeSpeedDuplex(EXAMPLE_SWT_PORT0 + i, &phyMode, &phySpeed, &phyDuplex);if(result == kStatus_Success)			{				ethernetif_on_link_up(netif_, (phy_speed_t)phySpeed, (phy_duplex_t)phyDuplex, i);			}		}	}}

    这里是没有调用link down的函数,这里只考虑EP连接到Switch是不存在link down状态,如果用户需要在Switch所有对外的4个口都link down时关闭网卡,可以参考下面的代码:

    voidethernetif_probe_link(struct netif *netif_){staticint i = 0;phy_handle_t *phy;status_t st;bool total_status = false;bool status; // true = Link is upfor (i = 0; i < FSL_FEATURE_NETC_SWITCH_MAX_PORT_NUMBER; i++)    {        phy = ethernetif_get_phy(netif_, i);if (phy == NULL)        {continue;        }        st = PHY_GetLinkStatus(phy, &status);if (st == kStatus_Success)        {            LWIP_ASSERT_CORE_LOCKED();if (status)            {                st = PHY_GetLinkSpeedDuplex(phy, &speed, &duplex);if (st == kStatus_Success)                {                    ethernetif_on_link_up(netif_, speed, duplex, i);                }                netif_set_link_up(netif_);                total_status = true;            }        }    }if (total_status == false)    {        netif_set_link_down(netif_);        ethernetif_on_link_down(netif_);    }}
  5. 在netc_ethernetif.c文件的ethernetif结构体中添加swt的handle和config

    structethernetif{    ……swt_handle_t swt_handle;swt_config_t swt_config;}
  6. 在netc_ethernetif.c文件的ethernetif_plat_init函数中,将si从kNETC_ENETC0PSI0切换到kNETC_ENETC1PSI0

  7. 还是在ethernetif_plat_init函数中添加SWT的配置,代码来自于之前的netc_switch_cm33

    	SWT_GetDefaultConfig(&ethernetif->swt_config);    ethernetif->swt_config.ports[0].ethMac.miiMode = NETC_MII_MODE;    ethernetif->swt_config.ports[0].ethMac.miiSpeed = NETC_MII_SPEED;    ethernetif->swt_config.ports[0].ethMac.miiDuplex = kNETC_MiiFullDuplex;	ethernetif->swt_config.ports[0].commonCfg.ipfCfg.enIPFTable = true;	ethernetif->swt_config.ports[0].bridgeCfg.isRxVlanAware = false;	ethernetif->swt_config.ports[1].ethMac.miiMode = kNETC_RgmiiMode;    ethernetif->swt_config.ports[1].ethMac.miiSpeed = kNETC_MiiSpeed1000M;    ethernetif->swt_config.ports[1].ethMac.miiDuplex = kNETC_MiiFullDuplex;	ethernetif->swt_config.ports[1].commonCfg.ipfCfg.enIPFTable = true;	ethernetif->swt_config.ports[1].bridgeCfg.isRxVlanAware = false;	ethernetif->swt_config.ports[2].ethMac.miiMode = kNETC_RgmiiMode;    ethernetif->swt_config.ports[2].ethMac.miiSpeed = kNETC_MiiSpeed1000M;    ethernetif->swt_config.ports[2].ethMac.miiDuplex = kNETC_MiiFullDuplex;	ethernetif->swt_config.ports[2].commonCfg.ipfCfg.enIPFTable = true;	ethernetif->swt_config.ports[2].bridgeCfg.isRxVlanAware = false;	ethernetif->swt_config.ports[3].ethMac.miiMode = kNETC_RgmiiMode;    ethernetif->swt_config.ports[3].ethMac.miiSpeed = kNETC_MiiSpeed1000M;    ethernetif->swt_config.ports[3].ethMac.miiDuplex = kNETC_MiiFullDuplex;	ethernetif->swt_config.ports[3].commonCfg.ipfCfg.enIPFTable = true;	ethernetif->swt_config.ports[3].bridgeCfg.isRxVlanAware = false;	ethernetif->swt_config.ports[4].bridgeCfg.isRxVlanAware = false;    ethernetif->swt_config.bridgeCfg.dVFCfg.portMembership = 0x1FU;//(1U << NETC_SWT_PSEUDO_PORT) | NETC_SWT_USED_PORT_BITMAP;/* FDB lookup is performed, and if there is no match, the frame is flooded to the port bitmap in VLAN filter entry. */    ethernetif->swt_config.bridgeCfg.dVFCfg.mfo = kNETC_FDBLookUpWithFlood;//kNETC_NoFDBLookUp;//kNETC_FDBLookUpWithFlood;//kNETC_FDBLookUpWithDiscard;    ethernetif->swt_config.bridgeCfg.dVFCfg.mlo = kNETC_HardwareMACLearn;	ethernetif->swt_config.bridgeCfg.dVFCfg.enUseFilterID = true;    ethernetif->swt_config.bridgeCfg.dVFCfg.filterID = EXAMPLE_FRAME_FID;    ethernetif->swt_config.cmdRingUse            = 1U;    ethernetif->swt_config.cmdBdrCfg[0].bdBase   = ethernetif->cmdBuffDescrip;    ethernetif->swt_config.cmdBdrCfg[0].bdLength = NETC_CMDBD_NUM;	result = SWT_Init(&ethernetif->swt_handle, &ethernetif->swt_config);if (result != kStatus_Success)    {return;    }
  8. 之前在ethernetif_probe_link会获取到Phy的状态,我们还需要在link_up函数里根据phy的配置来修改swt的config,如下位置添加ethernetif_swt_configure_link函数

  9. 修改netc_ethernetif.c文件的中断回调函数void msgintrCallback,将EP_CleanTxIntrFlags(ethernetif->ep_handle, 1, 0);改为        EP_CleanTxIntrFlags(ethernetif->ep_handle, 2, 0),这个函数对应修改的是SITXIDR0寄存器,对应的bit域是TXF[x],刚才我们介绍过EP or SWT,当EP=ENETC1时,ring0保留给了SWT,所以发送函数会使用ring1来发送,当EP=ENETC0时,因为这个独立MAC没有经过Switch,所以默认使用了ring0来发送数据。如果搞不懂,直接把这俩bit都W1C了也没问题。

四. 上板测试

  1. PC依次连接ENET0~ENENT3,通过ping 192.168.0.102(Endpoint的IP)命令来判断EP是否可以正常通信。
  2. 在测试1正常的情况下,修改PC的网络配置,将自协商修改为100M全双工或者其他速率模式,重新ping EP来判断Switch是否会根据PHY状态自适应工作。
  3. 连接多台PC或者网络设备到ENET0~ENET3,通过ping命令测试多台设备之间是否可以正常通信。

五. 代码分享

大家可以到下面这个地址拿到完整的工程:

https://gitee.com/hudiekaxp/rt1180_switch_lwip

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-10 03:22:54 HTTP/2.0 GET : https://67808.cn/a/473458.html
  2. 运行时间 : 0.109813s [ 吞吐率:9.11req/s ] 内存消耗:4,523.76kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=485ed9d1bd570ec708e7dd98d4b4da96
  1. /yingpanguazai/ssd/ssd1/www/no.67808.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/no.67808.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/no.67808.cn/runtime/temp/6df755f970a38e704c5414acbc6e8bcd.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000425s ] mysql:host=127.0.0.1;port=3306;dbname=no_67808;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000595s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000273s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000295s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000405s ]
  6. SELECT * FROM `set` [ RunTime:0.000185s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000524s ]
  8. SELECT * FROM `article` WHERE `id` = 473458 LIMIT 1 [ RunTime:0.000393s ]
  9. UPDATE `article` SET `lasttime` = 1773084174 WHERE `id` = 473458 [ RunTime:0.008548s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000222s ]
  11. SELECT * FROM `article` WHERE `id` < 473458 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000355s ]
  12. SELECT * FROM `article` WHERE `id` > 473458 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000349s ]
  13. SELECT * FROM `article` WHERE `id` < 473458 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001498s ]
  14. SELECT * FROM `article` WHERE `id` < 473458 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002691s ]
  15. SELECT * FROM `article` WHERE `id` < 473458 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000868s ]
0.111298s