F1C200S

ESP8089除錯紀錄


參考資料:
1. twzy
2. whycan
3. esp8089-spi
4. nano-5.2-tf

關於如下的esp8089 crash問題

# rmmod esp8089-spi.ko
[   80.007618] esp8089_spi: esp_spi_exit
[   80.011553] esp8089_spi: esp_spi_remove
[   80.016011] esp8089_spi: normal byte write data no-busy wait byte 0xff no recv at the first time
[   80.027305] sip_detach, cancel rx_process_work in SIP_RUN
[   80.032885] sip_detach, cancel sendup_work in SIP_RUN
[   80.037979] ------------[ cut here ]------------
[   80.042737] WARNING: CPU: 0 PID: 101 at kernel/workqueue.c:3031 __flush_work+0x224/0x258
[   80.050866] Modules linked in: esp8089_spi(O-)
[   80.055428] CPU: 0 PID: 101 Comm: rmmod Tainted: G           O      5.2.0 #5
[   80.062544] Hardware name: Allwinner suniv Family
[   80.067360] [] (unwind_backtrace) from [] (show_stack+0x10/0x14)
[   80.075249] [] (show_stack) from [] (__warn+0xc4/0xf0)
[   80.082238] [] (__warn) from [] (warn_slowpath_null+0x3c/0x48)
[   80.089893] [] (warn_slowpath_null) from [] (__flush_work+0x224/0x258)
[   80.098295] [] (__flush_work) from [] (__cancel_work_timer+0x108/0x1e4)
[   80.106941] [] (__cancel_work_timer) from [] (sip_detach+0x100/0x200 [esp8089_spi])
[   80.116717] [] (sip_detach [esp8089_spi]) from [] (esp_spi_remove+0x5c/0x208 [esp8089_spi])
[   80.127093] [] (esp_spi_remove [esp8089_spi]) from [] (spi_drv_remove+0x1c/0x38)
[   80.136394] [] (spi_drv_remove) from [] (__device_release_driver+0x140/0x1f0)
[   80.145416] [] (__device_release_driver) from [] (driver_detach+0xac/0xd4)
[   80.154162] [] (driver_detach) from [] (bus_remove_driver+0x4c/0xa0)
[   80.162537] [] (bus_remove_driver) from [] (esp_spi_exit+0x30/0xd88 [esp8089_spi])
[   80.172147] [] (esp_spi_exit [esp8089_spi]) from [] (sys_delete_module+0x170/0x1e4)
[   80.181624] [] (sys_delete_module) from [] (ret_fast_syscall+0x0/0x50)
[   80.189995] Exception stack(0xc3241fa8 to 0xc3241ff0)
[   80.195147] 1fa0:                   0002fc38 00000000 bea1dcf4 00000880 00000000 bea1de58
[   80.203425] 1fc0: 0002fc38 00000000 00000002 00000081 000e79d0 00000000 00000000 00000000
[   80.211644] 1fe0: bea1dcdc bea1dcc0 0002fad0 b6f4e6d8
[   80.216769] ---[ end trace 2fa11815b209e97a ]---
[   80.223550] sip_detach, cancel tx_work in SIP_RUN
[   80.228354] esp8089_spi: esp_spi_remove sip detached
[   80.233839] esp8089_spi: esp_spi_remove dealloc mac80211
[   80.239305] esp8089_spi: esp_spi_remove free dma_buffer
[   80.244754] esp8089_spi: eagle spi remove complete

定位了一下問題, 發現問題是在sendup_work並沒有初始化, 原因是在Makefile裡面定義了RX_SENDUP_SYNC, 所以解法如下

void sip_detach(struct esp_sip *sip)
{
  int po;

  if(sip == NULL) {
    return ;
  }

  sip_free_init_ctrl_buf(sip);
  if(atomic_read(&sip->state) == SIP_RUN) {
    sif_disable_target_interrupt(sip->epub);
    atomic_set(&sip->state, SIP_STOP);
    sif_disable_irq(sip->epub);

    dbg("%s, cancel rx_process_work in SIP_RUN\n", __func__);
    cancel_work_sync(&sip->rx_process_work);
    skb_queue_purge(&sip->rxq);
    mutex_destroy(&sip->rx_mtx);

#ifndef RX_SENDUP_SYNC
    dbg("%s, cancel sendup_work in SIP_RUN\n", __func__);
    cancel_work_sync(&sip->epub->sendup_work);
#endif

P.S. 通過RX_SENDUP_SYNC判斷是否需要cancel sendup_work

重新編譯後, 就可以正常rmmod esp8089-spi.ko

# rmmod esp8089-spi.ko
[   59.506484] esp8089_spi: esp_spi_exit
[   59.510416] esp8089_spi: esp_spi_remove
[   59.514883] esp8089_spi: normal byte write data no-busy wait byte 0xff no recv at the first time
[   59.526156] sip_detach, cancel rx_process_work in SIP_RUN
[   59.533771] sip_detach, cancel tx_work in SIP_RUN
[   59.538574] esp8089_spi: esp_spi_remove sip detached
[   59.544062] esp8089_spi: esp_spi_remove dealloc mac80211
[   59.549525] esp8089_spi: esp_spi_remove free dma_buffer
[   59.554975] esp8089_spi: eagle spi remove complete

但是, 重新上esp8089-spi.ko, 就會發現之前的資源並沒有被成功釋放, 相較於原本crash, 這又是另一個問題

# insmod esp8089-spi.ko
[   79.450589] esp8089_spi: esp_spi_init
[   79.454554] esp8089_spi: EAGLE DRIVER VER bdf5087c3deb
[   79.459743] request_init_conf: attr_name[crystal_26M_en]
[   79.459762] request_init_conf: attr_name[test_xtal]
[   79.465173] request_init_conf: attr_name[sdio_configure]
[   79.470085] request_init_conf: attr_name[bt_configure]
[   79.475478] request_init_conf: attr_name[bt_protocol]
[   79.480649] request_init_conf: attr_name[dual_ant_configure]
[   79.485780] request_init_conf: attr_name[test_uart_configure]
[   79.491471] request_init_conf: attr_name[share_xtal]
[   79.497288] request_init_conf: attr_name[gpio_wake]
[   79.502327] request_init_conf: attr_name[no_auto_sleep]
[   79.507237] request_init_conf: attr_name[ext_rst]
[   79.512535] request_init_conf: attr_name[wakeup_gpio]
[   79.517277] request_init_conf: attr_name[ate_test]
[   79.522403] request_init_conf: attr_name[speed_suspend]
[   79.527399] esp8089_spi: esp_spi_dummy_probe enter
[   79.537874] sun6i-spi 1c06000.spi: chipselect 0 already in use
[   79.543869] esp8089_spi: FAILED to create slave
[   79.548475] Unable to handle kernel NULL pointer dereference at virtual address 000001a8
[   79.556682] pgd = b46ba3ec
[   79.559431] [000001a8] *pgd=832e2831, *pte=00000000, *ppte=00000000
[   79.565808] Internal error: Oops: 17 [#1] ARM
[   79.570194] Modules linked in: esp8089_spi(O+) [last unloaded: esp8089_spi]
[   79.577206] CPU: 0 PID: 102 Comm: insmod Tainted: G           O      5.2.0 #5
[   79.584353] Hardware name: Allwinner suniv Family
[   79.589102] PC is at spi_setup+0x4/0x15c
[   79.593330] LR is at sif_platform_new_device+0x38/0x88 [esp8089_spi]
[   79.599729] pc : []    lr : []    psr: 60000013
[   79.606017] sp : c32dfe4c  ip : 00000000  fp : bf03b58c
[   79.611255] r10: bf03b574  r9 : 00000003  r8 : bf03bbf8
[   79.616497] r7 : c0a397c0  r6 : bf03b0e4  r5 : bf03b534  r4 : bf03bbf4
[   79.623035] r3 : 00000000  r2 : 00000000  r1 : 60000093  r0 : 00000000
[   79.629578] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
[   79.636730] Control: 0005317f  Table: 832d0000  DAC: 00000051
[   79.642503] Process insmod (pid: 102, stack limit = 0xf70a1f18)
[   79.648445] Stack: (0xc32dfe4c to 0xc32e0000)
[   79.652832] fe40:                            bf03bbf4 bf03b534 bf004340 bf03bbf4 00000000
[   79.661047] fe60: bf03b0e4 bf0410a8 bf03bb78 bf00e774 bf03c000 bf041000 ffffe000 00000000
[   79.669260] fe80: c0a397c0 7fffffff 00000000 00000000 00000000 c0102c24 00000000 00044920
[   79.677474] fea0: 00000000 00000000 00000000 00000000 6e72656b 00006c65 00000000 00000000
[   79.685687] fec0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[   79.693904] fee0: 00000000 dc8cb5ab bf03b9e0 bf03b9e0 c322b200 b6fdfca0 0000017b c016f5d8
[   79.702120] ff00: 0000017b 7fffffff 00000000 00000003 b6fdfca0 c0171d6c 7fffffff 00000000
[   79.710335] ff20: 00000003 00000000 00000000 c4876000 00044920 00000000 c4883eba c48b0940
[   79.718549] ff40: c4876000 00044920 c48ba2e0 c48ba138 c48b4714 0003c000 0003dde0 000062ec
[   79.726764] ff60: 0003efeb 00000000 00000000 00000000 000062dc 00000025 00000026 0000001d
[   79.734977] ff80: 00000000 00000011 00000000 dc8cb5ab d9dcb4f6 00000001 b6fdfca0 c0101208
[   79.743193] ffa0: c32de000 c0101000 d9dcb4f6 00000001 00000003 b6fdfca0 00000000 bee6bf4d
[   79.751408] ffc0: d9dcb4f6 00000001 b6fdfca0 0000017b 000e79d0 00000000 00000000 00000000
[   79.759625] ffe0: bee6bdcc bee6bdb0 0002fa5c b6f586d8 20000010 00000003 00000000 00000000
[   79.768122] [] (spi_setup) from [] (esp_msg_level+0x0/0xfffd0f1c [esp8089_spi])
[   79.777241] Code: 00002af8 00002710 c07d5984 e92d4030 (e59031a8)
[   79.783497] ---[ end trace 35e8692b41672902 ]---
Segmentation fault

定位了一下問題, 是在esp_spi_exit()沒有做資源釋放的動作, 改成如下就可以解決

static void __exit esp_spi_exit(void)
{
  dbg("(%s) ++\n", __func__);
  esp_debugfs_exit();
  esp_unregister_early_suspend();
  spi_unregister_device(spi);
  spi_unregister_driver(&esp_spi_driver);
  esp_wakelock_destroy();
  dbg("(%s) --\n", __func__);
}

P.S. spi_unregister_device(spi)

不過, 司徒的esp8089是早期的版本, 沒有reset腳位, 目前也沒有特地拉出來



修改後, 執行第2次insmod esp8089-spi.ko已經不會crash了, 不過似乎缺少reset的動作

# insmod esp8089-spi.ko
[   56.044941] (esp_spi_init)++
[   56.047925] (request_init_conf) crystal_26M_en=1
[   56.047947] (request_init_conf) test_xtal=0
[   56.052729] (request_init_conf) sdio_configure=1
[   56.056957] (request_init_conf) bt_configure=0
[   56.061600] (request_init_conf) bt_protocol=0
[   56.066138] (request_init_conf) dual_ant_configure=0
[   56.070534] (request_init_conf) test_uart_configure=2
[   56.075581] (request_init_conf) share_xtal=0
[   56.080666] (request_init_conf) gpio_wake=0
[   56.085012] (request_init_conf) no_auto_sleep=0
[   56.089230] (request_init_conf) ext_rst=0
[   56.093831] (request_init_conf) wakeup_gpio=12
[   56.097874] (request_init_conf) ate_test=0
[   56.102388] (request_init_conf) speed_suspend=0
[   56.107036] (sif_platform_new_device) added spi device 0xc3228c00
[   56.331811] (esp_spi_init) power up complete
[   56.336285] (esp_spi_probe)++
[   56.339300] (esp_setup_spi)++
[   56.342409] (esp_setup_spi)--
[   56.345418] (sif_spi_protocol_init)++
[   56.349105] (sif_spi_protocol_init) failed count 0
[   56.555559] (sif_spi_protocol_init) failed count 1
[   56.762018] (sif_spi_protocol_init) failed count 2
[   56.968402] (sif_spi_protocol_init) failed count 3
[   57.174802] (sif_spi_protocol_init) failed count 4
[   57.381160] (sif_spi_protocol_init) failed count 5
[   57.587539] (sif_spi_protocol_init) failed count 6
[   57.794031] (sif_spi_protocol_init) failed count 7
[   58.000408] (sif_spi_protocol_init) failed count 8
[   58.206804] (sif_spi_protocol_init) failed count 9
[   58.413143] (sif_spi_protocol_init) failed count 10
[   58.619588] (esp_spi_probe) first error exit
[   58.624038] eagle: probe of spi1.0 failed with error -110
[   58.629640] (esp_spi_init) sem_timeout = 0
[   58.633867] (esp_spi_init)-- (errno 0)

第2次insmod失敗的原因是沒有做RESET的動作, 雖然可能可以透過命令做RESET, 不過, ESP8089的使用手冊似乎抓不到, 因此, 司徒最後飛線解決第2次insmod失敗的問題

CHIP_EN腳位如下:


CHIP_EN連接到PE6


接著多次測試後, 驅動都可以正確執行, wlan0也可以正常運作

# rmmod esp8089-spi.ko
[  235.627234] (esp_spi_exit) ++
[  235.630644] (esp_spi_remove)++
[  235.635838] sip_detach, cancel rx_process_work in SIP_RUN
[  235.641465] esp_op_remove_interface enter, vif addr ac:d0:74:b8:2d:49, beacon enable 0
[  235.649660] sip_txq_process skb_len 22 pkt_len 260 blknum 1
[  235.655465] esp_op_stop
[  235.660157] sip_detach, cancel tx_work in SIP_RUN
[  235.665112] (esp_spi_remove) sip detached
[  235.669563] (esp_spi_remove) dealloc mac80211
[  235.674095] (esp_spi_remove) free dma_buffer
[  235.678420] (esp_spi_remove)--
[  235.681866] (esp_spi_exit) --

# insmod esp8089-spi.ko
[  238.117040] (esp_spi_init)++
[  238.120026] (request_init_conf) crystal_26M_en=1
[  238.120049] (request_init_conf) test_xtal=0
[  238.124831] (request_init_conf) sdio_configure=1
[  238.129059] (request_init_conf) bt_configure=0
[  238.133765] (request_init_conf) bt_protocol=0
[  238.138249] (request_init_conf) dual_ant_configure=0
[  238.142681] (request_init_conf) test_uart_configure=2
[  238.147680] (request_init_conf) share_xtal=0
[  238.152802] (request_init_conf) gpio_wake=0
[  238.157107] (request_init_conf) no_auto_sleep=0
[  238.161318] (request_init_conf) ext_rst=0
[  238.165917] (request_init_conf) wakeup_gpio=12
[  238.169962] (request_init_conf) ate_test=0
[  238.174479] (request_init_conf) speed_suspend=0
[  238.442136] (sif_platform_new_device) added spi device 0xc3228c00
[  238.671606] (esp_spi_init) power up complete
[  238.676079] (esp_spi_probe)++
[  238.679094] (esp_setup_spi)++
[  238.682200] (esp_setup_spi)--
[  238.685211] (sif_spi_protocol_init)++
[  238.688901] (sif_spi_protocol_init) failed count 0
[  238.895437] (sif_spi_protocol_init) failed count 1
[  239.101828] (sif_spi_protocol_init) failed count 2
[  239.308199] (sif_spi_protocol_init) rx: 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  239.816383] (sif_spi_protocol_init) rx: 0xff, 0xff, 0x01, 0x10, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff
[  240.324926] (sif_spi_protocol_init) rx: 0xff, 0xff, 0x00, 0x90, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff
[  240.833308] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  241.341498] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  241.850059] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  242.358415] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  242.866623] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  243.375170] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  243.883519] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  244.391780] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  244.900285] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  245.408637] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  245.916879] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  246.425426] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  246.934229] (sif_spi_protocol_init) rx: 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
[  247.442171] (sif_spi_protocol_init)--
[  247.448635] (check_target_id) SLC data 0x12102500, ID 0x00000600

修改部份

static int __init esp_spi_init(void)
{
  int err=0;
  int edf_ret=0;
  bool powerup=false;
  long long sem_timeout=0;

  dbg("(%s)++\n", __func__);
  edf_ret = esp_debugfs_init();
  request_init_conf();
  esp_wakelock_init();
  esp_wake_lock();

  if((err = gpio_request(ESP_RST_PIN, "esp_rst")) != 0) {
    dbg("(%s) failed to request reset gpio\n", __func__);
    return err;
  }
  gpio_direction_output(ESP_RST_PIN, 1);
  gpio_set_value(ESP_RST_PIN, 0);
  msleep(250);
  gpio_set_value(ESP_RST_PIN, 1);

  spi = sif_platform_new_device();
  powerup = true;
  if(!powerup) {
    dbg("(%s) failed to power up\n", __func__);
    err = -ENODEV;
    goto _fail;
  }

  dbg("(%s) power up complete\n", __func__);
  sif_sdio_state = ESP_SDIO_STATE_FIRST_INIT;
  sema_init(&esp_powerup_sem, 0);
  spi_register_driver(&esp_spi_driver);

  sem_timeout = down_timeout(&esp_powerup_sem, msecs_to_jiffies(ESP_WAIT_UP_TIME_MS));
  dbg("(%s) sem_timeout = %lld\n", __func__, sem_timeout);
  if(sem_timeout == 0 && sif_get_ate_config() == 0) {
    if(sif_sdio_state == ESP_SDIO_STATE_FIRST_NORMAL_EXIT) {
      spi_unregister_driver(&esp_spi_driver);
      msleep(100);
      sif_sdio_state = ESP_SDIO_STATE_SECOND_INIT;
      spi_register_driver(&esp_spi_driver);
    }
  }
  esp_register_early_suspend();
  esp_wake_unlock();
  printk("(%s)-- (errno %d)\n", __func__, err);
  return err;

_fail:
  esp_wake_unlock();
  esp_wakelock_destroy();
  printk("(%s)-- (errno %d)\n", __func__, err);
  return err;
}

static void __exit esp_spi_exit(void)
{
  dbg("(%s) ++\n", __func__);
  esp_debugfs_exit();
  esp_unregister_early_suspend();
  spi_unregister_device(spi);
  spi_unregister_driver(&esp_spi_driver);
  esp_wakelock_destroy();
  gpio_free(ESP_RST_PIN);
  dbg("(%s) --\n", __func__);
}

不知為何ESP8089無法搜尋到家裡的AP,司徒陸續找個幾個裝置後,終於從倉庫找到可以連線的裝置


目前司徒測試了一下ping以及wget下載比較大量的檔案,沒有出線斷線問題

# wget ftp.gnu.org/gnu/gcc/gcc-3.0.3.tar.gz
Connecting to ftp.gnu.org (209.51.188.20:80)
saving to 'gcc-3.0.3.tar.gz'
gcc-3.0.3.tar.gz     100% |********************************| 17.5M  0:00:00 ETA
'gcc-3.0.3.tar.gz' saved

# wget ftp.gnu.org/gnu/gcc/gcc-3.0.4.tar.gz
Connecting to ftp.gnu.org (209.51.188.20:80)
saving to 'gcc-3.0.4.tar.gz'
gcc-3.0.4.tar.gz     100% |********************************| 17.5M  0:00:00 ETA
'gcc-3.0.4.tar.gz' saved

# ping 8.8.8.8
ping: socket: Address family not supported by protocol
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=1034 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=1009 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=115 time=1009 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=115 time=1008 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=115 time=1000 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=115 time=1040 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=115 time=1009 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=115 time=1008 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=115 time=1008 ms
64 bytes from 8.8.8.8: icmp_seq=10 ttl=115 time=1005 ms
^C
--- 8.8.8.8 ping statistics ---
11 packets transmitted, 10 received, 9.09091% packet loss, time 0ms
rtt min/avg/max/mdev = 1000.429/1013.056/1040.108/12.232 ms, pipe 2

司徒目前部屬Nginx後,還是無法重現斷線問題,因此,修復的部份主要是Crash的問題

Welcome to VeganOS
vegan login: root
# cd /boot/
# insmod esp8089-spi.ko 
[   13.652674] esp8089_spi: loading out-of-tree module taints kernel.
[   22.848024] random: crng init done

# ifconfig wlan0 up
# wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
[   60.611010] wlan0: authenticate with a4:e4:b8:70:01:7b
[   60.616609] wlan0: send auth to a4:e4:b8:70:01:7b (try 1/3)
[   60.831775] wlan0: send auth to a4:e4:b8:70:01:7b (try 2/3)
[   60.841999] wlan0: authenticated
[   60.851734] wlan0: associate with a4:e4:b8:70:01:7b (try 1/3)
[   61.061740] wlan0: associate with a4:e4:b8:70:01:7b (try 2/3)
[   61.072413] wlan0: RX AssocResp from a4:e4:b8:70:01:7b (capab=0x431 status=0 aid=1)
[   61.080298] wlan0: AP has invalid WMM params (AIFSN=1 for ACI 2), will use 2
[   61.087501] wlan0: AP has invalid WMM params (AIFSN=1 for ACI 3), will use 2
[   61.094765] wlan0: associated

# udhcpc -i wlan0
udhcpc: started, v1.33.1
udhcpc: sending discover
udhcpc: sending select for 192.168.0.2
udhcpc: lease of 192.168.0.2 obtained, lease time 7200
deleting routers
adding dns 192.168.176.251
adding dns 192.168.176.252
adding dns 192.168.176.253
adding dns 192.168.176.254

# mkdir /tmp/logs
# /usr/nginx/sbin/nginx -c /usr/nginx/conf/nginx.conf -p /tmp
#


返回上一頁