This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDSIDK437X:DHCP 客户端验证

Guru**** 2547350 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/963307/tmdsidk437x-dhcp-client-verification

器件型号:TMDSIDK437X

您好!

下面是我使用的组件。

我正在使用"Nimu_ICSS_BasicExample_idkAM437x_wSoCLib_armExampleProject"。

我需要在代码中提供 DHCP 客户端服务。

我已在.cfg 文件中启用 DHCP 客户端服务。

1) 1)我是否必须做更多的事情才能获得工作 DHCP 客户端?

2) 2)如果 DHCP 客户端正在运行、如何检查分配的 IP 地址?

3) 3)是否可以在 DHCP 客户端运行时返回到以前的静态 IP 地址?如何操作?

4) 4)由于我使用的是 idk 437x、它有两个端口? 两个端口都将使用 DHCP 客户端服务? 服务器为两个端口分配的 IP 地址将不同或相同?

此致、

Vrund

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我想确保您找到了 NDK API 指南的第6.4节:

    https://www.ti.com/lit/ug/spru524k/spru524k.pdf?ts=1607626119067&ref_url=https%253A%252F%252Fwww.google.com%252F

    它涵盖了 DHCP 客户端操作、并提供了有助于解决您的问题的有用信息。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ronnb、

    我已经介绍了的第6.4节

    https://www.ti.com/lit/ug/spru524k/spru524k.pdf?ts=1607626119067&ref_url=https%253A%252F%252Fwww.google.com%252F

    TI_NDK_CONFIG_Global_serviceReport 已分配、并且我已在 ti_NDK_CONFIG_Global_serviceReport 函数下保留断点、但未达到断点。

    静态字符*TASKTERM[]={"Telnet"、"HTTP"、"NAT"、"DHCP"、"DHCP"、"DNS"};
    静态字符*ReportStr[]={"、"正在运行"、"已更新"、"完成"、"故障";
    静态字符*usStr[]={
    "已禁用"、"正在等待"、"INT32"、"uint_state"、"uint_state"、"uint_uint_u_state"
    uint32_t 报告、void *h)
    {
    DbgPrintf (DBG_INFO、"服务状态:%-9s:%-9s:%-9s:%-9s:%03d\n"、
    TASKNAME[item-1]、StatusStr[Status]、
    ReportStr[Report/256]、Report&0xFF);
    
    } 

    我还介绍 了的第2.1.4.1.2节

    https://www.ti.com/lit/ug/spru523k/spru523k.pdf?ts=1607657232354    

    其中提到 了 NDK.c 中的 initIp()函数,但我没有找到 initIp 函数,因此我在下将其添加到代码中  

    函数"stackInitHook"、从全局挂钩(启动线程初始化挂钩)调用。

    下面是在 stackInitHook.kindl; ly 考虑 DHCP 相关代码下添加的代码。

    void stackInitHook (handle hCfg)
    {
    CI_IPNet NA;
    CI_route RT;
    
    /*为接口1添加 IP 地址*/
    na.ipaddr = inet_addr (ipaddr);
    na.ipMask = inet_addr (ipMask);
    CfgAddEntry (hCfg、CFGTAG _IPNet、1、0、sizeof (CI_IPNet)、
    (uint8_t *)&nA、0);
    
    /*
    *为接口1添加网关
    *-->我*认为*以下内容应该起作用,但您可能需要不同的值...
    *
    bzero (&RT、sizeof (RT));
    rt.IPDestAddr = 0;
    rt.IPDestMask = 0;
    rt.IPGateAddr = inet_addr (ipGateway);
    
    CfgAddEntry (hCfg、CFGTAG _route、0、0、
    sizeof (cI_route)、(uint8_t *)&RT、0);
    
    
    /*Add a configuration entry specifying the DHCP client service to be used */
    #if 1 | DHCP_CLIENT
    CI_SERVICE_DHCPPC dhcpc;
    unsigned char DHCP_options[]={ DHCPPT_SUBNet_MASK };
    
    #if 0 | ALTERIND_ADD_IP_INIT
    静态 char *主机名="tioc";
    /*将全局主机名添加到 hCfg (在所有已连接的域中声明)*/
    CfgAddEntry (hCfg、CFGTAG _SYSINFO、CFGITEM_DHCP_HOSTNAME、0、
    strlen (hostname)、(unsigned char *) hostname、NULL);
    #endif
    
    /*使用 DHCP 获取接口1上的 IP 地址*/
    /*如果由"IfIdx"指定,则指定 DHCP 服务打开*/
    memset (&dhcpc、0、sizeof (dhcpc));
    dhcpc.cisargs.Mode = CIS_FLG_IFIDXVALID;
    dhcpc.cisargs.IfIdx = 1;
    dhcpc.cisargs.pCbSrv =&ti_ndk_config_Global_serviceReport;
    dhcpc.param.pOptions = DHCP_OPTIONS;
    dhcpc.param.len = 1;
    CfgAddEntry (hCfg、CFGTAG 服务、CFGITEM_SERVICE_DHCPCLIENT、0、
    sizeof (dhcpc)、(unsigned char *)&dhcpc、NULL);
    #endif
    
    } 

    我还从 NetTool 文件夹中添加了 DHCP 客户端相关文件。(C:\ti\ndk_3_61_01_01\packages/ti\ndk\nettools\dhcp)

    下面是工作区的屏幕截图。

    我还从  全局挂钩中调用了 void netOpenHook()和 void netCloseHook()。

    在 netOpenHook()下 ,我添加 了 DHCPOpen( pNTA,pNTP ), 在 netCloseHook()下,我添加 了 DHCPlose (hdhcp );函数。

    下面是代码。

    /*
    === netHooks.c ====
    *此文件包含用于启动发送和恢复线程
    的挂钩函数*/
    
    #include 
    #include 
    #include 
    #include 
    
    
    静态句柄 hecho = 0;
    静态句柄 hEchoUdp = 0;
    静态句柄 hData = 0;
    静态句柄 hNull = 0;
    静态句柄 hOob = 0;
    静态句柄 hDHCP = 0;
    
    extern void ti_ndk_config_Global_serviceReport (uint32_t item、uint32_t Status、
    uint32_t 报告、void *h);
    
    
    void netOpenHook()
    {
    //创建我们的本地服务器
    hecho = DemonNew (sock_stREAMNC、0、502、dtask_tcp_echo、
    OS_TASKPRINORM、OS_TASKSTKNORM、0、8);
    hEchoUdp = DemonNew (SOCK_DGRAM、0、7、dtask_udp_echo、
    OS_TASKPRINORM、OS_TASKSTKNORM、0、1);
    hData = DemonNew (sock_stream、0、1000、dtask_tcp_datasrv、
    OS_TASKPRINORM、OS_TASKSTKNORM、0、3);
    hNull = DemonNew (SOCK_STREAMNC、0、1001、dtask_tcp_nullsrv、
    OS_TASKPRINORM、OS_TASKSTKNORM、0、3);
    hOob = DemonNew (SOCK_STREAMNC、0、999、dtask_tcp_oobsrv、
    OS_TASKPRINORM、OS_TASKSTKNORM、0、3);
    NTARGS * pNTA;
    NTPARAM_DHCP *pNTP;
    unsigned char DHCP_OPTIONs[]={ DHCPPT_SUBNET_MASK };
    pNTA->CallMode =0x0001;/* CI_FLG IFIDXVALID*/
    pNTA->IfIdx = 1;
    pDHCPA->PCB =&ti_NDK_CONFIG_Global_NTDNS*/
    
    
    
    
    pNTP= 1;pnTPNTP= 1;pnTnTP=
    
    
    1;pnTnTnTnTnT = 1;pnTnTnTnTnT = 1;pnTnTnTnTnTnT = 1;pnTnTnt
    
    
    DemonFree (hOob);
    DemonFree (hNull);
    DemonFree (hData);
    DemonFree (hEchoUdp);
    DemonFree (hecho);
    DHCPlose (hDHCP );}
    
    
    

    之后、我尝试进行调试、但下面的屏幕截图失败了。

    请确认执行方式是正确的。

    还可以帮助解决调试问题。

    此致、

    Vrund