22.從0學(xué)ARM-uboot中的網(wǎng)絡(luò)協(xié)議棧

原創(chuàng) 一口Linux 2021-05-25 11:45

 

本篇是從0學(xué)ARM系列文章的最后一篇,后面暫無(wú)更新計(jì)劃。

想學(xué)習(xí)ARM知識(shí),建議收藏下面的合集的鏈接。


從0學(xué)ARM


uboot中網(wǎng)絡(luò)協(xié)議棧

網(wǎng)卡的驅(qū)動(dòng),對(duì)于上層協(xié)議來(lái)說(shuō),已經(jīng)封裝好了發(fā)送和接收數(shù)據(jù)的接口,那么上層協(xié)議棧只需要按照順序調(diào)用對(duì)應(yīng)的網(wǎng)卡驅(qū)動(dòng)函數(shù)就可以進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的收發(fā)。

uboot中的協(xié)議棧相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,有以下幾個(gè)特點(diǎn):

  1. 傳輸層只支持UDP協(xié)議;
  2. 目前只支持ICMP、TFTP、NFS、DNS、DHCP、CDP、SNTP等幾種協(xié)議;
  3. 網(wǎng)卡采用poll接收數(shù)據(jù)包,而不是中斷方式;
  4. 數(shù)據(jù)包的發(fā)送和接收操作是串行操作,不支持并發(fā)。

1. 網(wǎng)絡(luò)協(xié)議棧架構(gòu)

下面是uboot網(wǎng)絡(luò)協(xié)議棧的函數(shù)調(diào)用流程:

2. 通過(guò)DNS命令來(lái)解析一個(gè)數(shù)據(jù)包的收發(fā)流程

uboot中,所有的命令都用宏U_BOOT_CMD來(lái)定義, dns命令的定義如下:

426 U_BOOT_CMD( 
427     dns,    3,  1,  do_dns,
428     "lookup the IP of a hostname",
429     "hostname [envvar]"
430 );

當(dāng)我們?cè)趗boot的命令終端輸入命令dns后,命令解析函數(shù)就會(huì)調(diào)用dns執(zhí)行函數(shù)do_dns()

389 int do_dns(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
390 
{
 ……
406     if (strlen(argv[1]) >= 255) {
407         printf("dns error: hostname too long\n");
408         return 1;
409     }
410 
411     NetDNSResolve = argv[1];
412 
413     if (argc == 3)
414         NetDNSenvvar = argv[2];
415     else
416         NetDNSenvvar = NULL;
417 
418     if (NetLoop(DNS) < 0) {
419         printf("dns lookup of %s failed, check setup\n", argv[1]);
420         return 1;
421     }
422 
423     return 0;
424 }

406行 判斷參數(shù)字符串長(zhǎng)度,大于255非法 411行 參數(shù)1必須是要解析的主機(jī),存儲(chǔ)在NetDNSResolve 中 413~416行 保存dns命令的環(huán)境參數(shù),該參數(shù)可以沒(méi)有 418行 進(jìn)入網(wǎng)絡(luò)協(xié)議處理函數(shù)入口NetLoop(),并將對(duì)應(yīng)的協(xié)議DNS傳遞給該函數(shù)

NetLoop()代碼比較長(zhǎng),我們只分析其中比較重要的幾段代碼

 316 /**********************************************************************/
 317 /*
 318  *  Main network processing loop.
 319  */

 320 
 321 int NetLoop(enum proto_t protocol)
 322 
{
 323     bd_t *bd = gd->bd;
 324     int ret = -1;
 …………
 352     NetInitLoop();
  …………
 367         switch (protocol) {
 368         case TFTPGET:
 369 #ifdef CONFIG_CMD_TFTPPUT
 370         case TFTPPUT:
 371 #endif
 372             /* always use ARP to get server ethernet address */
 373             TftpStart(protocol);
 374             break;
  …………
 426 #if defined(CONFIG_CMD_DNS)
 427         case DNS:
 428             DnsStart();
 429             break;
 430 #endif
 438     }
 …………
 461     for (;;) {
 462         WATCHDOG_RESET();
 463 #ifdef CONFIG_SHOW_ACTIVITY
 464         show_activity(1);
 465 #endif
 466         /*
 467          *  Check the ethernet for a new packet.  The ethernet
 468          *  receive routine will process it.
 469          */

 470         eth_rx();
 471 
 472         /*
 473          *  Abort if ctrl-c was pressed.
 474          */

 475         if (ctrlc()) {
 476             /* cancel any ARP that may not have completed */
 477             NetArpWaitPacketIP = 0;
 478 
 479             net_cleanup_loop();
 480             eth_halt();
 481             /* Invalidate the last protocol */
 482             eth_set_last_protocol(BOOTP);
 483 
 484             puts("\nAbort\n");
 485             /* include a debug print as well incase the debug
 486                messages are directed to stderr */

 487             debug_cond(DEBUG_INT_STATE, "--- NetLoop Abort!\n");
 488             goto done;
 489         }
  …………
 522         switch (net_state) {
 523 
 524         case NETLOOP_RESTART:
 525             NetRestarted = 1;
 526             goto restart;
 527 
 528         case NETLOOP_SUCCESS:
 529             net_cleanup_loop();
 530             if (NetBootFileXferSize > 0) {
 531                 char buf[20];
 532                 printf("Bytes transferred = %ld (%lx hex)\n",
 533                     NetBootFileXferSize,
 534                     NetBootFileXferSize);
 535                 sprintf(buf, "%lX", NetBootFileXferSize);
 536                 setenv("filesize", buf);
 537 
 538                 sprintf(buf, "%lX", (unsigned long)load_addr);
 539                 setenv("fileaddr", buf);
 540             }
 541             if (protocol != NETCONS)
 542                 eth_halt();
 543             else
 544                 eth_halt_state_only();
 545 
 546             eth_set_last_protocol(protocol);
 547 
 548             ret = NetBootFileXferSize;
 549             debug_cond(DEBUG_INT_STATE, "--- NetLoop Success!\n");
 550             goto done;
 551 
 552         case NETLOOP_FAIL:
 553             net_cleanup_loop();
 554             /* Invalidate the last protocol */
 555             eth_set_last_protocol(BOOTP);
 556             debug_cond(DEBUG_INT_STATE, "--- NetLoop Fail!\n");
 557             goto done;
 558 
 559         case NETLOOP_CONTINUE:
 560             continue;
 561         }
 562     }
 563 
 564 done:
 565 #ifdef CONFIG_CMD_TFTPPUT
 566     /* Clear out the handlers */
 567     net_set_udp_handler(NULL);
 568     net_set_icmp_handler(NULL);
 569 #endif
 570     return ret;
 571 }

函數(shù)參數(shù)為DNS 352行 初始化網(wǎng)絡(luò)信息,讀取ipaddr、gatewayip、netmask、serverip、dnsip等環(huán)境變量的值并復(fù)制到對(duì)應(yīng)的全局變量中

static void NetInitLoop(void)
{
 static int env_changed_id;
 int env_id = get_env_id();

 /* update only when the environment has changed */
 if (env_changed_id != env_id) {
  NetOurIP = getenv_IPaddr("ipaddr");
  NetOurGatewayIP = getenv_IPaddr("gatewayip");
  NetOurSubnetMask = getenv_IPaddr("netmask");
  NetServerIP = getenv_IPaddr("serverip");
  NetOurNativeVLAN = getenv_VLAN("nvlan");
  NetOurVLAN = getenv_VLAN("vlan");
#if defined(CONFIG_CMD_DNS)
  NetOurDNSIP = getenv_IPaddr("dnsip");
#endif
  env_changed_id = env_id;
 }
 memcpy(NetOurEther, eth_get_dev()->enetaddr, 6);

 return;
}

367行 對(duì)傳入的參數(shù)做switch操作,不同的協(xié)議進(jìn)入到不同的處理流程 428行 執(zhí)行DnsStart(),

197 void
198 DnsStart(void)
199 {
200     debug("%s\n", __func__);
201 
202     NetSetTimeout(DNS_TIMEOUT, DnsTimeout);
203     net_set_udp_handler(DnsHandler);
204 
205     DnsSend();
206 } 

203行 函數(shù)net_set_udp_handler()主要將dns協(xié)議的回調(diào)函數(shù)DnsHandler()注冊(cè)到udp協(xié)議的回調(diào)指針udp_packet_handler,

void net_set_udp_handler(rxhand_f *f)
{
 debug_cond(DEBUG_INT_STATE, "--- NetLoop UDP handler set (%p)\n", f);
 if (f == NULL)
  udp_packet_handler = dummy_handler;//注冊(cè)到udp協(xié)議回調(diào)函數(shù)指針
 else
  udp_packet_handler = f;
}

DnsStart()最終會(huì)調(diào)用函數(shù)DnsSend()發(fā)送dns協(xié)議數(shù)據(jù)包,該函數(shù)是根據(jù)dns協(xié)議填充udp數(shù)據(jù)包

 37 static void
 38 DnsSend(void)
 39 {
 40     struct header *header;
 41     int n, name_len;
 42     uchar *p, *pkt;
 43     const char *s;
 44     const char *name;
 45     enum dns_query_type qtype = DNS_A_RECORD;
 46 
 47     name = NetDNSResolve;
 48     pkt = p = (uchar *)(NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE);
 49 
 50     /* Prepare DNS packet header */
 51     header           = (struct header *) pkt;
 52     header->tid      = 1;
 53     header->flags    = htons(0x100);    /* standard query */
 54     header->nqueries = htons(1);        /* Just one query */
 55     header->nanswers = 0;
 56     header->nauth    = 0;
 57     header->nother   = 0;
 58 
 59     /* Encode DNS name */
 60     name_len = strlen(name);
 61     p = (uchar *) &header->data;    /* For encoding host name into packet */
 62 
 63     do {
 64         s = strchr(name, '.');
 65         if (!s)
 66             s = name + name_len;
 67 
 68         n = s - name;           /* Chunk length */
 69         *p++ = n;           /* Copy length  */
 70         memcpy(p, name, n);     /* Copy chunk   */
 71         p += n;
 72 
 73         if (*s == '.')
 74             n++;
 75 
 76         name += n;
 77         name_len -= n;
 78     } while (*s != '\0');
 79 
 80     *p++ = 0;           /* Mark end of host name */
 81     *p++ = 0;           /* Some servers require double null */
 82     *p++ = (unsigned char) qtype;   /* Query Type */
 83 
 84     *p++ = 0;
 85     *p++ = 1;               /* Class: inet, 0x0001 */
 86 
 87     n = p - pkt;                /* Total packet length */
 88     debug("Packet size %d\n", n);
 89 
 90     DnsOurPort = random_port();
 91 
 92     NetSendUDPPacket(NetServerEther, NetOurDNSIP, DNS_SERVICE_PORT,
 93         DnsOurPort, n);
 94     debug("DNS packet sent\n");
 95 }

51~57行 根據(jù)dns協(xié)議填充dns協(xié)議頭,數(shù)據(jù)幀首地址為NetTxPacket,此處通過(guò)指針pkt和p來(lái)填充dns數(shù)據(jù)幀 60~85行 根據(jù)協(xié)議格式要求填充要解析的host名字到數(shù)據(jù)包 87行 計(jì)算數(shù)據(jù)包長(zhǎng)度 90行 產(chǎn)生一個(gè)隨機(jī)的端口號(hào) 92~93行 調(diào)用udp協(xié)議的發(fā)送函數(shù)NetSendUDPPacket(),參數(shù)依次是:以太頭信息,DNS服務(wù)器 ip地址,DNS服務(wù)器端口號(hào),我們的dns服務(wù)端口號(hào),數(shù)據(jù)包長(zhǎng)度

 688 int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport,
 689         int payload_len)

 690 
{
 691     uchar *pkt;
 692     int eth_hdr_size;
 693     int pkt_hdr_size;
 694 
 695     /* make sure the NetTxPacket is initialized (NetInit() was called) */
 696     assert(NetTxPacket != NULL);
 697     if (NetTxPacket == NULL)
 698         return -1;
 699 
 700     /* convert to new style broadcast */
 701     if (dest == 0)
 702         dest = 0xFFFFFFFF;
 703 
 704     /* if broadcast, make the ether address a broadcast and don't do ARP */
 705     if (dest == 0xFFFFFFFF)
 706         ether = NetBcastAddr;
 707 
 708     pkt = (uchar *)NetTxPacket;
 709 
 710     eth_hdr_size = NetSetEther(pkt, ether, PROT_IP);
 711     pkt += eth_hdr_size;
 712     net_set_udp_header(pkt, dest, dport, sport, payload_len);
 713     pkt_hdr_size = eth_hdr_size + IP_UDP_HDR_SIZE;
 714 
 715     /* if MAC address was not discovered yet, do an ARP request */
 716     if (memcmp(ether, NetEtherNullAddr, 6) == 0) {
 717         debug_cond(DEBUG_DEV_PKT, "sending ARP for %pI4\n", &dest);
 718 
 719         /* save the ip and eth addr for the packet to send after arp */
 720         NetArpWaitPacketIP = dest;
 721         NetArpWaitPacketMAC = ether;
 722 
 723         /* size of the waiting packet */
 724         NetArpWaitTxPacketSize = pkt_hdr_size + payload_len;
 725 
 726         /* and do the ARP request */
 727         NetArpWaitTry = 1;
 728         NetArpWaitTimerStart = get_timer(0);
 729         ArpRequest();
 730         return 1;   /* waiting */
 731     } else {
 732         debug_cond(DEBUG_DEV_PKT, "sending UDP to %pI4/%pM\n",                                                                               
 733             &dest, ether);
 734         NetSendPacket(NetTxPacket, pkt_hdr_size + payload_len);
 735         return 0;   /* transmitted */
 736     }
 737 }

696~706行 參數(shù)檢查 710行 設(shè)置以太頭 713行 設(shè)置udp協(xié)議頭 716~730行 如果沒(méi)有目的MAC地址,就要先發(fā)送ARP請(qǐng)求 734行 調(diào)用函數(shù)NetSendPacket(),參數(shù)分別是:要發(fā)送數(shù)據(jù)幀的首地址,數(shù)據(jù)包長(zhǎng)度

529 /* Transmit a packet */  
530 static inline void NetSendPacket(uchar *pkt, int len)
531 
{
532     (void) eth_send(pkt, len);
533 }

532行 調(diào)用我們注冊(cè)的函數(shù)dm9000_send() 該函數(shù)已經(jīng)分析過(guò),根據(jù)流程圖,回到函數(shù)NetLoop()

461~562行 循環(huán)接收網(wǎng)絡(luò)數(shù)據(jù)包 470行 調(diào)用網(wǎng)卡驅(qū)動(dòng)接收函數(shù)eth_rx()

int eth_rx(void)
{
 if (!eth_current)
  return -1;

 return eth_current->recv(eth_current);
}

eth_current->recv(eth_current)函數(shù)就是我們注冊(cè)的網(wǎng)卡的接收函數(shù)dm9000_rx(),該函數(shù)我們上一章已經(jīng)分析過(guò),最終通過(guò)調(diào)用函數(shù)NetReceive(),將數(shù)據(jù)幀上傳到協(xié)議棧

 943 void
 944 NetReceive(uchar *inpkt, int len)
 945 {
 946     struct ethernet_hdr *et;
 947     struct ip_udp_hdr *ip;
 948     IPaddr_t dst_ip;
 949     IPaddr_t src_ip;
 950     int eth_proto;
 ……
 957 
 958     NetRxPacket = inpkt;
 959     NetRxPacketLen = len;
 960     et = (struct ethernet_hdr *)inpkt;
 961 
 962     /* too small packet? */
 963     if (len < ETHER_HDR_SIZE)
 964         return;
 965 
 ……
 984 
 985     eth_proto = ntohs(et->et_protlen);
 986 
 987     if (eth_proto < 1514) {
 988         struct e802_hdr *et802 = (struct e802_hdr *)et;
  ……
 997 
 998     } else if (eth_proto != PROT_VLAN) {    /* normal packet */
 999         ip = (struct ip_udp_hdr *)(inpkt + ETHER_HDR_SIZE);
1000         len -= ETHER_HDR_SIZE;
1001 
1002     } else {            /* VLAN packet */
 ……
1026     }
1027 
 …… 
1045     switch (eth_proto) {
 ……
1056     case PROT_IP:
1057         debug_cond(DEBUG_NET_PKT, "Got IP\n");
1058         /* Before we start poking the header, make sure it is there */
1059         if (len < IP_UDP_HDR_SIZE) {
1060             debug("len bad %d < %lu\n", len,
1061                 (ulong)IP_UDP_HDR_SIZE);
1062             return;
1063         }
1064         /* Check the packet length */
1065         if (len < ntohs(ip->ip_len)) {
1066             debug("len bad %d < %d\n", len, ntohs(ip->ip_len));
1067             return;
1068         }
1069         len = ntohs(ip->ip_len);
1070         debug_cond(DEBUG_NET_PKT, "len=%d, v=%02x\n",
1071             len, ip->ip_hl_v & 0xff);
1072 
1073         /* Can't deal with anything except IPv4 */
1074         if ((ip->ip_hl_v & 0xf0) != 0x40)
1075             return;
1076         /* Can't deal with IP options (headers != 20 bytes) */
1077         if ((ip->ip_hl_v & 0x0f) > 0x05)
1078             return;
1079         /* Check the Checksum of the header */
1080         if (!NetCksumOk((uchar *)ip, IP_HDR_SIZE / 2)) {
1081             debug("checksum bad\n");
1082             return;
1083         }
1084         /* If it is not for us, ignore it */
1085         dst_ip = NetReadIP(&ip->ip_dst);

1092         /* Read source IP address for later use */
1093         src_ip = NetReadIP(&ip->ip_src);


1184         /*
1185          *  IP header OK.  Pass the packet to the current handler.
1186          */

1187         (*udp_packet_handler)((uchar *)ip + IP_UDP_HDR_SIZE,
1188                 ntohs(ip->udp_dst),
1189                 src_ip,
1190                 ntohs(ip->udp_src),
1191                 ntohs(ip->udp_len) - UDP_HDR_SIZE);
1192         break;
1193     }
1194 }

參數(shù)inpkt:指向接收到的以太數(shù)據(jù)包頭 len:接收到的數(shù)據(jù)包的長(zhǎng)度 960行 變量NetRxPacket指向接收的數(shù)據(jù)頭,以太數(shù)據(jù)包包頭比定位以太協(xié)議頭 985行 從以太協(xié)議頭提取出協(xié)議字段,該字段表示后面是否是ip協(xié)議 999行 解析出ip協(xié)議頭 1045行 根據(jù)以太頭協(xié)議進(jìn)行switch操作 1059~1083行 對(duì)協(xié)議頭進(jìn)行合法性檢查 1085行 讀取出目的ip地址 1093行 讀取出源ip地址, 1187行 ip協(xié)議頭解析成功,調(diào)用udp協(xié)議回調(diào)函數(shù)udp_packet_handler(),該函數(shù)在之前的DnStart()注冊(cè)了DnsHandler

104 static void
105 DnsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len)
106 {
193 
194     net_set_state(NETLOOP_SUCCESS);
195 }

該函數(shù)用于解析DNS協(xié)議,在此不再詳解 解析成功后194行,會(huì)設(shè)置當(dāng)前執(zhí)行狀態(tài)為NETLOOP_SUCCESS, 代碼回到函數(shù)NetLoop()470行 475行 判斷是否按下ctrl+c快捷鍵,并作出操作 522~562行 對(duì)執(zhí)行結(jié)果進(jìn)行處理,計(jì)入統(tǒng)計(jì)信息 564行 如果net_state為NETLOOP_SUCCESS、NETLOOP_FAIL最終都會(huì)進(jìn)入done,從而置空udp回調(diào)函數(shù) 如果net_state為NETLOOP_CONTINUE,表明仍然有后續(xù)數(shù)據(jù)包要接收,則回到461行,繼續(xù)下一個(gè)數(shù)據(jù)包的接收

至此DNS協(xié)議的處理流程分析完畢,大家可以根據(jù)這個(gè)流程自行分析其他幾個(gè)協(xié)議的處理流程。

容易遇到的問(wèn)題

有的時(shí)候能讀取到 DM9000A 的 ID,連續(xù)操作就能讀取到 DM9000A 的 ID,但間隔一會(huì)操作就讀取不到 DM9000A 的 ID,通過(guò)調(diào)試,在 dm9000_reset 函數(shù)中加一句延時(shí)操作,就可以正常讀取 DM9000A 的 ID 了。

277     do {
278         DM9000_DBG("resetting the DM9000, 2nd reset\n");
279         udelay(25); /* Wait at least 20 us */
280     } while (DM9000_ior(DM9000_NCR) & 1);
281     udelay(150);
282     /* Check whether the ethernet controller is present */
283     if ((DM9000_ior(DM9000_PIDL) != 0x0) ||
284         (DM9000_ior(DM9000_PIDH) != 0x90))
285         printf("ERROR: resetting DM9000 -> not responding\n");
- END -
 精彩文章合集
所有原創(chuàng)
從0學(xué)Linux驅(qū)動(dòng)
粉絲問(wèn)答
C語(yǔ)言
從0學(xué)ARM
計(jì)算機(jī)網(wǎng)絡(luò)
一口Linux 寫(xiě)點(diǎn)代碼,寫(xiě)點(diǎn)人生!
評(píng)論
  • 做電池供電攝像頭、可視門(mén)鈴、戶外安防的同學(xué)應(yīng)該都踩過(guò)這個(gè)坑:攝像頭要拍,ISP、sensor、無(wú)線模塊全得開(kāi)著,整機(jī)電流動(dòng)輒幾百 mA。一節(jié) 18650 撐不了幾天,用戶投訴“怎么又沒(méi)電了”。有人會(huì)說(shuō):加個(gè) PIR 人體紅外不就行了?問(wèn)題是 PIR 怕熱、怕寵物、怕隔著亞克力/玻璃殼,而且只能感知“有溫差的人體移動(dòng)”,靈敏度飄忽。真正省電的思路應(yīng)該是:讓攝像頭平時(shí)徹底睡死,只有“前面有人/有動(dòng)靜”時(shí)才被一鍵喚醒——而負(fù)責(zé)這個(gè)“看門(mén)”角色的,最合適的是一顆低功耗雷達(dá)。一、為什么是雷達(dá),而不是 PI
    唯創(chuàng)知音語(yǔ)音芯片 2026-08-07 14:44 98瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 204117瀏覽
  • 摘要東莞市恒創(chuàng)連接器有限公司(HCHGCONN)是位于廣東東莞的連接器源頭制造工廠,專(zhuān)注于連接器國(guó)產(chǎn)替代、小間距大電流連接器、線對(duì)板連接器、線對(duì)線連接器、板對(duì)板連接器、電源連接器及定制連接器開(kāi)發(fā)。公司面向工業(yè)自動(dòng)化、新能源儲(chǔ)能、BMS、汽車(chē)電子、AI服務(wù)器、GPU供電、通信設(shè)備、醫(yī)療設(shè)備和智能家居等場(chǎng)景,提供從產(chǎn)品選型、替代評(píng)估、樣品驗(yàn)證到批量交付的一站式連接方案。恒創(chuàng)可支持 Molex、TE Connectivity、JST、Hirose、Samtec 等國(guó)際品牌部分系列的國(guó)產(chǎn)替代評(píng)估。常見(jiàn)替
    HC003 2026-08-07 10:14 78瀏覽
  • 樓宇自控里的“巴別塔”一棟智慧樓宇、一個(gè)產(chǎn)業(yè)園區(qū)里,暖通空調(diào)運(yùn)行著廠商私有協(xié)議,照明系統(tǒng)遵循專(zhuān)屬通信標(biāo)準(zhǔn),變配電、門(mén)禁安防各成體系——設(shè)備間數(shù)據(jù)壁壘森嚴(yán),上位平臺(tái)對(duì)接全靠定制化 “翻譯” 開(kāi)發(fā),不僅成本高企,交付周期也難以管控。這就是樓宇自控行業(yè)多年的痛點(diǎn):協(xié)議林立、封閉林立。而破局的鑰匙,早在30多年前就已經(jīng)寫(xiě)好了——BACnet。作為ASHRAE制定的樓宇自控國(guó)際標(biāo)準(zhǔn)協(xié)議,BACnet是如今全球樓宇自控系統(tǒng)(BAS)互聯(lián)互通的“通用語(yǔ)言”。新風(fēng)機(jī)、冷源群控、變配電、照明、門(mén)禁,凡是需要被樓宇
    飛凌嵌入式 2026-08-10 09:26 118瀏覽
  • 一、方案簡(jiǎn)介在Buildroot構(gòu)建的嵌入式Linux系統(tǒng)中部署Flutter應(yīng)用,主流有兩套成熟的開(kāi)源方案,分別適配不同的顯示場(chǎng)景與開(kāi)發(fā)需求:方案一:flutter-elinux(Sony開(kāi)源方案)由索尼官方維護(hù)的嵌入式Linux Flutter工具鏈,既支持DRM/GBM直接渲染,也兼容Wayland、X11等多種顯示后端,場(chǎng)景適配性更廣。方案二:flutter-pi(輕量級(jí)嵌入器)一款輕量級(jí)Flutter引擎宿主程序,僅基于底層DRM/GBM接口實(shí)現(xiàn)渲染,無(wú)需依賴(lài)桌面環(huán)境,資源占用更低,更
    飛凌嵌入式 2026-08-07 09:34 83瀏覽
  • 產(chǎn)品使用18V供電,配套4串鋰離子電池,需要設(shè)計(jì)一個(gè)充電器。因?yàn)檩斎?8V,電池最高 16.8V,壓差僅 1.2V。因?yàn)閴翰钐 J褂瞄_(kāi)關(guān)型的充電控制芯片不穩(wěn)定。嘗試自行設(shè)計(jì)一個(gè)。整體采用分立三極管 + TL431架構(gòu),分4個(gè)功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實(shí)現(xiàn)完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經(jīng) R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導(dǎo)通,對(duì)地拉低 R1、R2 組成的分壓控制節(jié)點(diǎn)電位;該節(jié)點(diǎn)直
    southcreek 2026-08-07 13:45 429瀏覽
  • 在物聯(lián)網(wǎng)從“萬(wàn)物互聯(lián)”邁向“萬(wàn)物智聯(lián)”的進(jìn)程中,LTE Cat.1憑借其在速率、成本與網(wǎng)絡(luò)覆蓋之間的完美平衡,正成為中低速物聯(lián)網(wǎng)市場(chǎng)的絕對(duì)主力。隨著2G/3G網(wǎng)絡(luò)的逐步退網(wǎng)以及新國(guó)標(biāo)對(duì)終端設(shè)備智能化、定位功能的強(qiáng)制要求,Cat.1模組迎來(lái)了爆發(fā)式的增長(zhǎng)窗口。在這一關(guān)鍵節(jié)點(diǎn),基于華為海思Hi2131芯片設(shè)計(jì)的LTE Cat.1模組,憑借其在能效、射頻、架構(gòu)及物理規(guī)格上的底層創(chuàng)新,成功打破了“高性能必高功耗”的傳統(tǒng)魔咒,為行業(yè)提供了極具競(jìng)爭(zhēng)力的連接最優(yōu)解。核心技術(shù)優(yōu)勢(shì):重塑Cat.1能效與連接標(biāo)桿海
    用戶1778981989717 2026-08-05 21:04 198瀏覽
  • 做藍(lán)牙音箱的工程師大概都碰過(guò)這個(gè)局面。產(chǎn)品要連手機(jī)放歌,要本地播開(kāi)機(jī)提示音和按鍵音,還要接 App 做配網(wǎng)和狀態(tài)上報(bào)。三件事拆開(kāi),早先的常規(guī)做法是音頻藍(lán)牙一顆料、數(shù)傳藍(lán)牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫(huà)越大,BOM 越算越貴,待機(jī)電流和固件工作量也跟著漲。WT2605C 出來(lái)以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍(lán)牙、BLE 數(shù)傳和 MP3 本地播放三樣全包了。對(duì)藍(lán)牙音箱來(lái)說(shuō),最實(shí)在的好處就
    唯創(chuàng)知音語(yǔ)音芯片 2026-08-06 15:14 338瀏覽
  •        很多人只見(jiàn)過(guò)封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經(jīng)過(guò)十幾道精密工序。它內(nèi)部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個(gè)生產(chǎn)過(guò)程里哪怕0.1微米的誤差,都會(huì)直接廢掉整批產(chǎn)品,這也是小尺寸晶振過(guò)去長(zhǎng)期依賴(lài)進(jìn)口,國(guó)內(nèi)廠商花了十幾年才啃下量產(chǎn)硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 494瀏覽
  • 讓微弱脈沖信號(hào)更清晰——鎖相放大器集成Boxcar平均器在脈沖激光、泵浦-探測(cè)、時(shí)間分辨光譜、飛行時(shí)間質(zhì)譜等實(shí)驗(yàn)中,真正需要測(cè)量的信號(hào)往往只出現(xiàn)在一個(gè)很短的時(shí)間窗口內(nèi),卻被淹沒(méi)在遠(yuǎn)大于它的噪聲和背景之中。 針對(duì)這類(lèi)穩(wěn)定重復(fù)的微弱脈沖與瞬態(tài)信號(hào),賽恩科儀為OE2052雙通道數(shù)字鎖相放大器帶來(lái)全新的Boxcar Averager功能升級(jí):在鎖相檢測(cè)之外,進(jìn)一步提供從周期波形觀察、門(mén)控測(cè)量到多周期平均的完整數(shù)字Boxcar測(cè)量鏈路。 Boxcar平均器,如何從噪聲中“截取”目標(biāo)信號(hào)?Boxcar平均器
    SSI_賽恩科儀 2026-08-07 15:49 5021瀏覽
我要評(píng)論
0
點(diǎn)擊右上角,分享到朋友圈 我知道啦
請(qǐng)使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 再逢明月照九州| tobu4第一次| 情非情电视剧全集免费播放| 翡翠恋曲| 遥遥在望| 棋魂电视剧在线观看完整免费全集| 妻子8免费完整高清HD| 禽兽传奇| 平凡之路多少集| 战狼6久久| 一起吃拉面吗| 大祠堂在线观看| 《她被搬运工侵犯》在线播放 | 战狼9欧美版免费观看完整版国语电影| 教授和他的女大学生| 已婚妇女的下午电影中文| 日本边添边摸边做边爱的网站| 下众的爱| 战勇第二季| 原始的爱意大利| 做aj视频大全| 夏日里的春天优酷| 曲江车展| 黑人男按摩师好爽| 窃听风云3| 张学友电影全集粤语| 巴山夜雨的意思| 我爱hk开心万岁下载| 韩国网剧隐身帽子| 情爱电影在线| 电锯惊魂全集| 蛇姬恋电影完整版在线看| 还珠格格第一部旧版全集| 布里奇顿 第四季全集观看| 性生活电影4| 金瓶梅2电影| 热烈在线观看| 露营地宋孝敏韩国| 百星酒店百度影音| 五号特工组片尾曲| 老公的部下是我的初恋| 愛してる! 电影| 菲律宾电影:赤裸大胆| 三年国语高清免费播放| 震撼性丑闻| 神探狄仁杰一部30完整版| 义姐不是不良妈妈动漫在线观看| 电视剧《下海》| 进击的巨人第二季第三集| 美国小辣椒1985| 东归英雄传电视剧| 爱情有烟火| 性 谎言和录像带| 龙月泰剧1集免费观看| 永兴县| 借种 在线观看| 乞丐大结局全集观看| 男女一起愁愁愁| 幸福到万家在线观看全集| 法国大选选情焦灼| 蒋玲玲版《渔夫的荒野史记》完整版| 箭在弦上免费观看全集| 平凡之路电视剧免费| 急诊护士在线观看| 小唐璜情史中文版| 我的爱情睡醒了| 人猿泰山HR版未删减版下载| 那片花那片海电视剧| 惊声尖叫4百度影音| 电影《牙医姐妹》完整版免费播放国| 骄阳似我赵今麦电视剧全集 | 百媚千娇全集在线观看| 东京奥运会回放| 邓家佳《除却巫山》在线| 楚汉骄雄30集国语版高清免费观看| 《雁回时》在线观看| 初体验5线观看完整免费版电视剧| 痞幼照片里的瓜| 武工队传奇2| 年经继拇中文版| 魔女2在线| 不再说分手| 部长外出的日子免费观看| 一家乱战5免费观看| 长月烬明电视剧全集| 女朋友63中汉字三义的背景故事视频| 七时吉祥全集免费观看| 总统之夜电影在线观看| 五十度灰高清完整版电影| 韩剧《爱妾》免费观看全集| 约会大作战第三季| 小蜜桃25| 警察锅哥40全集免费| 束缚游戏免费观看第一季全集| 米奇妙妙屋之大搜寻| 牙医姐妹完整版免费 在线观看 | 名侦探柯南日语版免费观看| 蜜桃成熟期时33d电影| 月之晴天满天星完整版| 快乐方程式 level c| 小凤新婚下集完整播放视频| 慈禧秘密生活 国语| 麦乐迪的女超人在线观看完整免费| 超能机器女友| 铃芽之旅 电影| 岸边露伴一动不动 忏悔室 | 《航空服务4》电影| 王雪晶新年歌曲| 刻晴大战史莱姆无删减版| 踏血寻梅| 牙医姐妹完整版视频播放| 乡村爱情9在线观看| 汪小敏笑看风云| 王嘉尔 papillon| 东北虎在水池放屁| 高清尼诺未删减| 道士下山| 粉红大白菜| 保你平安| 不当军事行为2017法版迅雷磁力| 尖刀班的五天五夜| 爱我几何未删减完整版| 母亲5免费完整版全集电视剧| 最新泰剧大全| 家庭秘密教学在线看| 朱孝天版楚留香传奇| 韩剧《蓝色生死恋》高清在线观看| 3d肉铺团在线播放| 风流女管家满天星| 《白蛇:浮生》正片免费观看| 壮志凌云女版电影在线观看| 撒娇女人最好命电影| 运河边的人们电视剧免费观看| 我的女孩主演| 胜者为王粤语| 另一种灿烂生活免费观看| 韩国女星潜规则视频下载| 朴诗妍《爱的释放》| 唐朝诡事录4奇谭在线观看| 《秘密少女俱乐部2》女兵是谁| 花与蛇4下载| 听说你喜欢我在线观看| 七根心简免费观看全集在线播放| 《老泥妹》电影| 隔山有眼3起源免费完整版 | 《第一次经历秘密》刘智贤| 深圳烹尸案| 余欢水全集| 减肥健美操| 返老还童 在线| 睫毛膏4美国版| 我们一起来看流星雨| 星落凝成糖40集免费全部看| 沧元图59完整版| 甄嬛传63集剧情| 正在播放: ROE-417 在见证女儿幸福的同时……却在婚礼宴席上,被女婿侵犯的母 | 维修工艳遇在线| 我的恶魔少爷电视剧| 美人鱼战队高清完整免费观看| 粘豆包电视剧| 苍老师80集经典电影播放免费观看| 日本电影《特殊游泳课》的编剧是谁| 天时地利人和英文| 东莞东坑新东泰| 挚爱游戏| 特殊美容师待遇7| 木法沙传奇免费观看完整版| 闪婚老公竟是顶头上司电视剧免费 | 使徒行者2粤语在线观看| 肥猫寻亲记1| 19岁大学生免费看电视剧| 速度与激情7完整版dvd| 名侦探柯南16 第11个前锋| 长相思第60集完整版免费下载 | 李茂换太子电影在线观看| 百万新娘全集| 好妈妈韩国免费观看完整版| 酒店1-90集免费观看| 西西里的美丽传说| 性感女人花| xl司令真人版第一季全集免费cb| 最美逆行| 综艺节目 女体探秘| 非礼勿视2电影完整版在线观看| 杰西·简啄木鸟| 妻子7免费版电视剧在线观看| 女律师的堕落91制片| 丰满年轻的继拇5 | 大话水浒什么职业好| 相忘谁先忘| 跆拳道表演| 情深深雨蒙蒙2| 红辣椒丁度| 恶女教师| 公主嫁到 粤语| 我和我的家乡在线播放最新| 金鸡sss 电影| 天使之恋 纯爱物语| 熟睡中被义子侵犯正在播放| 美国电影《炸天小姐》| 龙门飞甲电影| 锦绣安宁电视剧免费观看全集高清| 龙门镖局第四集| 《借种》电影| 《落魄贵族琉璃川》免费观看全集动漫| 美国超级星期二| 墨西哥电视剧《la rosa de guadalupe》(瓜达卢佩的玫瑰/奇迹玫瑰),熟女名字叫 | 危险伴侣| 火口的两人全集免费观看| 姊妹牙医| 斗罗大陆148集| 斯巴达克斯第5季第10集下载| 独行侠字幕| 《姐妹牙医》免费观| 古宅女人全集| 黑人大巨茎大战欧罗斯两白妞| 把娇妻借给朋友泄欲4| 美乃雀 在线观看| 剑阁县| 李娜年终总决赛| 寻找所罗门王的宝藏| 三年中国免费下载现看| 熊出没之狂野大陆| 武庚纪 动漫| 回复术士118集真人版免费| 花螺要煮多久才熟| 易经风水涣| 天黑请闭眼电视剧| 义姐不是良妈ova动漫全集免费观看| 电影金光大道| 嘉黎县| 缘分 电影| 我和我的房东| 花甲房东真人版免费看| 美人鱼免费观看完整版| 孟鹤堂结两次婚| 《夫妻一场》大结局| 大丫鬟结局| 太阳之歌女主角| 非常有喜电视剧全集| 黑白配高清在线观看| 老公请原谅我在线免费观看| 梦想的声音第一期| 小屁孩日记免费完整观看| 女律师替夫还债电影免费观看| 魔女宅急便电影| 法国空乘2017完整版| 心动的信号第8季| 战狼6免费播放观看在线视频| 死亡游戏动漫| 巩义市| 亲本家人| 布衣知县梵如花| 绝密飞行| 扫黑风暴15集在线观看| 美乃雀免费电影| 小蓝电影| 以爱为营电视剧免费观看在线| 百团大战 电影| 熟睡中被义子侵犯电。| 全城热恋20150920| 独刺电视剧全集36集免费观看| 两女打架| 超人迪加之最终决战粤语| 电影生化危机| 水手服饲育电影高清完整版在线观看 | 法国版《绣感》未删减版在线观看| 慈禧秘密生活 国语| 金银梅5普通版在线观看免费| 爱情醒来了| 泰剧电视剧免费观看高清| 四大名捕高清| 《早恋》| 售楼小姐的秘密在线播放| 《唐砖》电视剧| 伦理《法国空乘4观看| 新金梅瓶2 国语完整版 | 八仙全传之八仙过海| 食物链01| 小蜜蜂姐妹5娃娃脸| 《盒子屋》电影在线观看| 烟台市| 小生怕怕粤语| 我是传说国语版| 《姐妹牙医》完整版在线观看免费播放 | 老板办公室乳摸秘书gif动态图| 普通事故未删减| 莫妮卡《爱我几何》电影免费无删减 | 电影伊波拉病毒完整版在线观看| 二人世界精彩片段| 特殊游泳私人教练在线观看| 长津湖电影免费观看| 私人性监狱| 当我飞奔向你电视剧| 女大学生的心理沙龙室| 一步之遥在线观看完整版免费| 个人取向| 法国版女超人麦乐迪哪里看| 加利福尼亚山谷女孩们| 战狼6下载完整版| 爱国让你想起什么| 分娩按摩| 花样年华在线观看| 漂白电视剧免费观看| 功夫状元演员表| 地牢女孩在线观看完整版高清| 混血女大学生私密按摩电影免费| 朋友的妈妈2中字线观高清| 最高的爱人诏不干涉工作和家庭| 发电俏娇娃在线观看| 19岁大学生真人观看电视剧呀中文| 天火传说| 雷霆扫毒土豆| 疯马秀的舞蹈| 味道云南 纪录片| 《倔强驱魔师》免费观看| 小孩身上有白斑图片| 战狼7欧式少女战狼12| 釜山行2在线观看免费观看完整版| 电影麦乐迪女超人完整版免费观看| 熊孩子惨案| 神犬奇兵电视剧| 郭达蔡明小品打针| 高清《重选纨绔当爹》短剧在线观看| 娃娃脸经典版5| 蝴蝶效应1| 爸爸来播种完整版| 鄂州父女瓜完整版| 蛇姬恋电影完整版在线看| 灯草和尚 bt| 斗罗大陆206集免费观看| 山东妇女P大毛多水多| 《吠城》电影高清免费观看全集| 人猿泰山1995免费观看完整版| 高清《年轻朋友的妻子3》| 渴望 电视剧| 特种兵之火凤凰27| 在丈夫面前被别人欺负日语| 樱兰高校男公关部1| 间谍过家家第三季免费观看| 金银悔6一10集| 电视剧青春无季免费观看西瓜影视| 法国版《女超人:麦乐迪》完整版| 人鱼传说电影完整版高清在线观看 | 虎胆龙威4高清百度影音| 97电视剧在线播放免费观看| 陆贞传奇18| 古墓丽影山寨版满天星免费观看| 杏林春暖在线免费观看| 韩国电影我的游泳教练| 幸存者电影| 关于瑜伽的日本电影| 庶女逆袭:嫡姐别嚣张短剧全集| 联谊对象是RS系警官| 《女装正太2》| 隔山有眼2| 怪兽八号| 县委大院电视剧免费观看完整版| 奥美迦奥特曼中文版| 日本电影妈妈爱上儿子的同学免费观看| 长津湖电影| 美姊妹牙医电影完整观看视频在线| 老表你好嘢国语全集| 爱妹妹美女网| 冯巩小品返乡| 唐宫美人天下杨幂| 王多鱼打扑克免费观看| 恶魔少爷别吻我第二季| 英国空姐3免费高清电视剧在线播放| 邪恶帝国的兴起| qvod 花与蛇| 极速前进第四季| 速度与激情5国语版| 女销售靠睡觉卖房子电影| 黑帮大佬和我的365五天| 插曲的痛中文版| 马斯克回应儿子想与自己断绝关系| 秘密花园在线观看全集免费| 玉蒲团二之玉女心经| 电影 昨天| 哇嘎在线观看免费| 轧戏在线观看| 酒店1-5集| 长相思第60集完整版免费下载| 荔枝光俱乐部| 壮志凌云2(啄木鸟)在线观看| 超级魔术师克里斯| 《义子侵犯》寺岛志保| 钢筋规范| 潘多拉的秘密| 苏菲的抉择电影免费完整版| 3d蒲团肉完整版电影| 战狼6在线观看免费版高清视频| 经典兔子舞曲| 中文字幕本无吗| 唐古拉风暴mp3| 自贡女子遭夫妻两人殴打扒衣| 天蓝蓝 凤凰传奇| 出轨同学会4| xl司令第一季全集免费观看动漫在线播放| 海绵宝宝双人闯关| 水润女人刘智贤主演| 使徒行者2粤语在线播放| 《玛克辛》电影| 保罗2电影免费播放| 盲战在线观看免费| 赤板栗牙医电影观看| 斗破苍穹缘起在线观看| 新津县| 男女一起愁愁愁免费观看91| 凹凸世界动漫| 欧美5| 黑日危机在线观看完整版| 云南虫谷15 16| 陈真电视剧| 下一站幸福优酷| 倔强驱魔师动漫完整版| 传闻中的陈芊芊免费观看| 《激战丛林》完整版免费| 电影一帘幽梦| 霍元甲李连杰高清电影在线观看| 杨敏思版电视剧第二回| 青梅竹马是消防2季未增删| 《丰胸沙龙治疗3》HD无字高清完整版 | 但丁的地狱| 高清为时已是寿司!?未删减| 按摩美女胸部电影| 电视剧妈妈在等你全集免费播放| 人猿泰山hr版1995意大利版| 如果我爱你全集| 扫黑风暴免费高清全集| 黄金时代电影| 《还债十日》| 姐姐睡着高清免费观看电视剧全集| 《私人航空》免费观看在线观看| 联谊对象是食草系第二季| 鸭王2在线免费观看| 坎贝奇品味人生观看| 爱本无罪| 本乡爱| 盗墓笔记 电视剧| 抗日奇侠全集播放| 高压监狱高2清完整免费版在线观看| 魔兽世界封停超4万开挂账户| 神探夏洛克第三季| 50岁徐娘阿姨电影免费观看| 皮囊之下电影完整高清在线播放| 风中奇缘| 维修师傅的遇艳在线观看伦理片 | 功夫状元全集| 南京大屠杀| 荣誉守则3满天星| 强制诱惑| 女武神第3季免费观看高清| 美国壮志凌云2011第八放映像| 敏敏跳舞| 绝对臣服短剧免费观看全集高清| 麦乐迪女超人电影| 一人之下第三季在线| 火山口的两人| 情圣终结者下载| 男女一起愁愁愁免费网站| 史努比动画片| 请用你的指尖扰乱我第一季| 拉拉安斋电影完整版| 电视剧流水迢迢| 高清《借钱》韩剧| 王李丹妮新片《维修工》叫什么名字 | 妻子妈妈双字ID电影| 像傻瓜一样去爱全集| 公之孚手中字9| 无职转生第二季樱花动漫第三集| 公的浮之手电影完整版| 半把剪刀| 混合性爱| 睫毛膏5美国1983中文| 凯登克劳斯主演电影在线观看| 沧元图59完整版| 分娩按摩5| 迷失东京| 武林风全球功夫盛典| 老头给少妇精油按摩性生活电影| 火线出击电视剧| 程序员那么可爱分集剧情介绍| 春光灿烂猪八戒动画片| 哭泣女人的诅咒| 双人调情按摩术韩国在线观看 | 致郁生日| 妈妈的职业5在线观看免费完整版电视剧全集高清 | 电影红嫁衣在线高清免费观看全集 | 学生妈妈5字| 浙江不明飞行物冲破云层坠落| 牧神记第62集完整版| 相奸游戏1| 电影版《异人之下》免费观看高清| 花木兰刘亦菲在线观看免费版高清| 人猿泰山1995成人版意大利在线观看完 | 《悬崖绝壁》| 布兰迪和他的怪物| 正在播放: JUL-520 留下好色的老爹和软弱的妻子 我去了三天两夜的出差... 成 | 八方传奇电视剧| 代替不孕的丈夫HD中文字幕| 无法传达给你在线观看日剧| 燃冬电影高清在线观看| 日剧和部长一起去出差 | 美丽的小樱桃| 电影《美人鱼》| 《瞄准》全集免费观看| 俘虏之锁动漫1-2季全集在线观看| 四十不惑电影| 西野翔作品番号封面| 牙医赤子板栗完整版在线观看| 唔黐线唔正常| 日本和讨厌的部长出差系列| 黄子华栋笃笑| 漂亮宝贝| 倔强驱魔师全集免费看| 韩版恶作剧之吻网络| 韩国电影奸臣在线观看| 小密桃5| 杨门寡妇肉床电影完整版| 绥宁县| 韩剧马医| 老师好在线观看| 韩国电影维修工的艳遇| 余罪第三季25到36| 巴霍巴利王2在线观看| 需要爸爸播种免费看中文版| 少年派2正版全集免费观看| 昆明辟谣城投专家会议纪要| 假面骑士01| 我是特种兵之火凤凰在线观看| 爱我几何3| 潮湿的猫1982年意大利| 3d蒲团肉完整版高清| 美国ZzzOooxxx视频| 高清《前度》免费播放| 笔仙惊魂| 坎贝奇电影全集免费看| 最好的相遇电影免费观看| 铜川市| 赤桥下的暖流完整版| 杜琪峰复仇| 女销售员的销售秘密2| 现在的是哪一个多闻! ?| 神雕侠侣刘亦菲| 倔强驱魔师1-4集免费动漫在线观看樱 | 机械师2高清完整版| 最终幻想15王者之剑| 战狼6免费播放观看入口| 滹沱儿女电视剧| 泰国三级激夜完整版| 需要爸爸的种子 在线| 丁宝桢电视剧免费观看| 番茄酱番茄沙司| 隔壁邻居很美味免费版| 欲望都市第四季| 潘霜霜个人资料| 僵尸新娘国语版免费完整版| 女人的村庄完整版| 漂亮的小瘦子| 朱元璋电视剧胡军| 黑执事第一季| 我和继拇做爰6| 爱人韩剧免费观看电视剧| 我爱喵星人免费高清观看完整版| 我的女友妈妈韩字的ID是谁电影 | 迷人的保姆 电影免费| 团地妻下载| 恶作剧之吻1下载| 桃源县| 胭脂雪剧情介绍| 待到重逢时泰剧| 电影《香醇的绣感》男主 | 《伊波拉病毒》普通话| 广场舞玩腻| 唐凯vs丹勒| 牙医姐妹未删减版在线观看| 善良的嫂子2中文| 火影492| 图书馆的女朋友日漫在线观看完整免费版电视剧第五集 | 特种部队2字幕| 张若昀人之初在线观看| 性的暴行2糟蹋女兵电影在线观看| 我推的孩子樱花在线观看| 新水浒传| 浪漫女家教电视剧免费完整版| 蝶舞天涯全集| 重生之逆转人生短剧全集| 需要爸爸播种子HD-云播免费在线观看-西瓜影院 | 小凤新婚电影手机在线免费观看| 年轻的小姨子在线播放| 电视剧金太狼的幸福生活| 耍要爸爸播种子| 《大侦探 第十一季》未删减| 夜店北京百度影音| 侵犯高傲女教师电影白峰美羽| 庆余年免费观看| 清流租房| 女子特工队满天星1973| 能免费看18视频网站| 有夫之妇电视剧剧情介绍| 义姐是不良| 隔山有眼2| 双城之战在线观看免费完整版| 古墓丽影特别版法国 在线播放| 吕继宏歌曲咱老百姓| 厨神王妃厨艺:征服王爷全集免费| 大兵的寝室电影在线免费观看 | 末代皇帝电视剧| 迁安市| 放弃吧亚当君| 黑白禁区在线观看| 电视剧廖家| 破冰行动在线| 猛鬼差馆2| 新白娘子传奇免费版| 想要爸爸播种子在线观看| 电视剧妈妈无罪| 《医生特殊的治疗》免费看| 美容院的待遇8免费观看| 高清《心火》观看完整版| 非亲兄弟演员表| 韩国美容院电影是什么| 给我豹豹迷羊| 萌宝厨神闹新春短剧免费观看| 需要爸爸播种英文免费看| 《维修工艳遇》2007| 碟中谍5在线观看完整高清免费版| 凯登克罗斯在线电影免费观看护士 | 大汉天子2| 国家宝藏1高清| 战狼6妈妈版免费资源| 电视剧产科男医生全集| 吉娜 维尔德| 八尺夫人原版电影免费观看| 新醉打金枝电视剧| 计春华简介| xl司令第一季全集在线真人版| 华丽的外出视频| 中央台2024开学第一课| 天地男儿国语版免费观看| 羞辱上司无删减在线观看| 乐高蜘蛛侠拼装教程| 拥抱太阳的月亮国语版| 严础熙三级未删减版观看| 中原镖局之天地英豪| 黄子华栋笃笑2018| 风骚邻居| 电视剧冷风暴在线观看| 哈哈梦show| 老湿影院放映黒人男子,。大屌猛播美女髙清视频免费看 | 神探默多克第一季| 台湾电影黛比系列之女家教在线观看 | 精油按摩电影在线观看| 凱登克罗斯合集满| 金钱之味快播| 绝地出击 电视剧全集| 姐妹牙医1986| 追妻场:天价前妻全集免费| 为你钟情电影| 交换秘书在线观看| 张本煜回怼男观众称“大清亡了” | 目之所及| 爱唯侦察| 聊斋·兰若寺免费观看完整版| 金瓶梅 高清完整版 bt| 风云十里洋场全集| 暴躁老妈高清免费观看电视剧 | 印度藏歌| 毒医肥尸无删减免费观看电视剧| 熊猫在线观看免费版| 台湾小可| 战狼6欧式少女高清观看下载电影| 老伴电视剧| 受戒电影完整版在线观看| 阿拉善英雄会7分钟| 白雪公主H版无删在线播放| 致命弯道3完整| 风骚诱惑| 请用你的手指打扰我!| 铠甲勇士之雅塔莱斯大电影完整版| 百度蹊径| 罗曼蒂克未测减除版CK| 韩国电影表姐| 亲爱的翻译官全集下载| 高清后来的我们未删减| 小凤新婚(下)| 人妻女警官痴汉电车在线| 奔跑吧黄河篇第二季在线观看| 97在线播放免费观看| 激情燃烧的岁月主题曲| 北上电视剧在线观看全集免费播放| 天祝| 中文字幕DI岳 和女胥视频| 韩“慰安妇”想见佩洛西被警卫推倒| 《部长来我家》| 长江七号爱地球全集| 《东北剿匪记》电视剧| 公元前2000年| JiZZ日本| 极限挑战第2季 综艺| 巴厘岛的故事电视剧免费观看全集 | 雪中悍刀行33集免费观看| 星际迷航3超越星辰迅雷下载| 朝鲜驱魔师16集免费大全| 电视剧摆渡人免费观看| overflower第一季| 情劫在线观看| 瘦身男女粤语| 《狙击精英巅峰对决》电影| 《示范销售避孕套》| 我的小确幸 电视剧全集免费观看| 我的丑爹全集| 古墓丽影3电影| 《渔夫的老婆》赛仑版叫什么 | 小羊人台球| 东北黑道风云二十年电视剧| 公浮之手中2| 李二不哈| 那山那人那狗电影| 窃听风云2电影| 肉蔻之香| 《色降》关秀媚无删减| 鬼楼 林心如| 再见美丽小姐国语版| 返老还童的电影| 妻子替弟还债全集免费观看| 《女教师》6在线观看| 闪婚大佬后免费全集在线观看| 大头儿子小头爸爸第二部| 越南战场满天星版叫什么名字| 姐姐的朋友5有翻译怎样免费观看| 你是我今生该等的人| 远离天堂| 衡山县| 三个女人按摩精油电影 | 我是处女座| 《二十一世纪爱情指南》| 猪猪侠猪猪侠| 成ren电影| 电影《功夫》免费观看国语| 渔夫荒野史记1988版七仙女| ooozzz| 旱魃之十万火急| 我放荡的生活| 大红包电影免费完整版| 酒店1—40全集观看| 我叫金三顺中文版| 亲爱的在线观看| 锦月如歌电视剧免费观看全集| 《爱我几何》莫妮卡原版免费观 | 庆余年2电视剧在线免费观看 | 瓜达卢佩的玫瑰电影免费观看| 回复术士的重启人生4集在线观看| 千树万树梨花开描写的是什么| 抓钱舞标准版| 美发店的待遇5HD| 还珠格格第二部剧情| 金瓶梅2 电影| 使徒行者免费| 敢死队1免费观看完整版电影| 星球大战女版满天星免费观看| 悬赏粤语| 风雨哈佛路电影| 黑帮老大哥我的365天在| 《美景之屋6》_完整在线观看免费观看 | over flow第一季在线观看翻译| 李翊君北京演唱会| rerese| 甄嬛传乐视| 站着再来一次第6集全集观看| 后宫甄嬛传64| 电视剧大哥| 电视剧皇太子秘史| 男女一起愁愁愁视频在线观看 | 法国大兵的寝室| 少年派2在线播放| 山东平原县震中现场直击| 独自等待迅雷下载| 水润女人全免费高清电视剧免费观看 | 缘之空全集免费观看完整版| 大江大河第一部全集免费观看| 金星 离婚| 美式忌保罗1—4| 《民间怪谈》彭禺厶| 电影沙丘| 《单恋》| 入室暴行| 甜蜜惩罚无删减无马赛克全集| 婚姻料理电视剧免费观看完整版高清| 两架钢琴未删减| 光头强的妈妈是谁| 小凤新婚下集精彩片段| 肥田喜事粤语版| 银河奥特曼3| 昆仑神宫电视剧16集在线观看 | 朋友的母亲7完整视频带翻译| 还有明天韩剧| 魔神英雄传第三季| 逆局在哪个平台播出| 牝教师在线观看| 法国贵夫人满天星| 娃娃脸电影完整版在线观看| caoliu 2014| 新金银悔1-5普通话免费播放| 星克莱尔第一夫人满天星| 小巷人家电视剧在线免费观看| 利刃出鞘3未删减| 苍空井| 男女一起相嗟嗟免费观看在学校 | 闪耀的他电视剧免费观看| 日本战狼8免费播放视频大全 | 牝教师| 暮光之城2迅雷下载| 小巷人家免费播放的电视剧| 女婿有劲枪枪到底岳峰扮演者| 黑白配HD1080完整版版| 女邻居2在线观看免费完整版旅行电影| 娇妻两根一起进3p视频| 《坏修女》免费观看高清电影| 善良的女邻居4| 4410电影| 电视剧蔷薇风暴免费观看全集高清| 蜜桃1997| 凯登克罗斯Hd版在线观看| 朴亚珍电影| 昨日的果实| 来不及说我爱你免费观看完整版 | 月之晴天满天星版韩国 | 维生素爱香水| 高清《惜花芷》| 陈雅伦被躁120分钟电影| 我叫赵甲第第二季电视剧| 黑镜第五季| 龙之吻剧情| 中文字Dl幕岳 和女胥友田真希在线| 韩国片两个同学的妈妈| 电视剧热播剧大全| 金银岛电影| 玉门市| 19岁大学生免费观看电视剧 | 冰河世纪2在线观看| 我 机器人| 邢台市| 苍月战士H成人版| 刺青鬼步舞| 策驰影院电视剧策驰2023| 吴艳妮家庭背景| 女版战狼10免费观看入口| 小碗干炸|