2020年6月12日 星期五

WAP-7531 的 Process (Smart MESH Version)

就是 ps command 執行的結果

# ps <enter> 
  PID USER VSZ STAT COMMAND     1 root      1520 S    init 
 系統中的Thread監督器,安排Thread的執行,就是以前的Process management。                  
    2 root         0 SW   [kthreadd]  
Softirq 的Deamon程式。
    3 root         0 SW   [ksoftirqd/0]
Handling of asynchronous events

    4 root         0 SW   [events/0]    

 主要作用是指定使用者空間的程式路徑和環境變數。
    5 root         0 SW   [khelper]
    6 root         0 SW   [async/mgr]
    7 root         0 SW   [ruby_pm/0]
    8 root         0 SW   [sync_supers]
    9 root         0 SW   [bdi-default]
   10 root         0 SW   [kblockd/0]
   11 root         0 SW   [kswapd0]
   12 root         0 SW   [mtdblock0]
   13 root         0 SW   [mtdblock1]
   14 root         0 SW   [mtdblock2]
   15 root         0 SW   [mtdblock3]
   16 root         0 SW   [mtdblock4]
   17 root         0 SW   [mtdblock5]
這裡要多講一下。這個是NOR Flash的System Deamon,說明系統有六個Partitions,至於每個Partition的SIZE,可以由下面的命令之中查到,每個Block是64KByte。
# cat /proc/partitions <Enter>
major minor  #blocks name
  31      0      128 mtdblock0
  31      1       64 mtdblock1
  31      2       64 mtdblock2
  31      3    10112 mtdblock3
  31      4    10112 mtdblock4
  31      5    12288 mtdblock5
目前其實只有mtdblock5是被建成的檔案系統。
# mount <Enter>
rootfs on / type rootfs (rw)
proc on /proc type proc (rw,relatime)
/dev/mtdblock5 on /mnt/mtd type jffs2 (rw,relatime)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
再看一下用途:
# cat /proc/mtd <Enter>
dev:    size   erasesize  name
mtd0: 00020000 00010000 "uboot"
mtd1: 00010000 00010000 "uboot_env"
mtd2: 00010000 00010000 "uboot_env_bak"
mtd3: 009e0000 00010000 "linux_safety"
mtd4: 009e0000 00010000 "linux_live"
mtd5: 00c00000 00010000 "data"
由於mtd5是檔案系統,所以有一個Deamon服務他,就是下面這個Process。
   52 root            0 SWN  [jffs2_gcd_mtd5]
   61 root      1512 S    /sbin/klogd
接下來幾個Deamon都是服務Process之間的通信服務
   93 root      1512 S    /bin/sh /scripts/cmdloop /usr/sbin/ubusd    
   94 root      1512 S    /bin/sh /scripts/cmdloop /scripts/ubus_evt_handler_d 
   98 root      1536 S    /bin/sh /scripts/ubus_evt_handler_d
  100 root      1424 S    /usr/sbin/ubusd
  104 root      1568 S    ubus listen system.event
  105 root      1536 S    /bin/sh /scripts/ubus_evt_handler_d
接下來三個程式都和地址解析有關係。第一個程式是 /usr/bin/ndev,這程式是 QTN Spartan 工具組的一部分。主要功能是監督網路之中,有關於 ARN, DHCP, NETBIOS與一個Ctrl_frame 的偵測與紀錄。這程式主要處理需要轉發的Protocol。
  459 root      1512 S    /bin/sh /scripts/cmdloop /usr/sbin/ndev monitor
  462 root      1560 S    dhclient -4 br0 -cf /tmp/dhclient.conf -lf /tmp/dhcli
  463 root      1352 S    /usr/sbin/ndev monitor
接下來又是一個架構很大的Deamon程式,叫做 /sbin/qevt_server。他是由 /etc/init.d/S41qevt 所啟動的。系統之中共有五個相關程式:
/etc/qevt_server_event.config   # 裡面有三個系統的帳號與密碼
/sbin/qevt_send_event               # 就用SOCKET送一段TEXT給SERVER,不清楚用途。
/sbin/qevt_mlpm                        # 還摸不清楚是如何運作的。
/sbin/qevt_server                       # 本伺服程式
/sbin/ql2t_test                            #  這是一個 Client測試工具,可以用來與 qevt_server 連線。
  486 root      1512 S    /bin/sh /scripts/cmdloop /sbin/qevt_server
  489 root      1584 S    /sbin/qevt_server
  494 root      1584 S    /sbin/qevt_server
  495 root      1584 S    /sbin/qevt_server
  609 root      1504 S    sleep 1
接下來四個 cwmpd,就是傳說中的 TR069 的Agent 。系統是使用 Netcwmp/Opencwmp Project版本。基本上都已經整好了。主要程式再

./build_roor/build_arc/netcwmp-c0f7cb0 :這是原始的Open Source。
./build_root/package/netcwmp                 :這目錄是QTN客製化的版本,Patches。

在Run time的系統當中:
/etc/cwmp.conf            : 執行檔的CONFIG要修改 
/etc/device.xml            : XML對應的執行功能在   
/tmp/cwmpd.log          : Log File 
/etc/init.d/S93cwmpd  : 啟動的程式在
 1177 root      3600 S    /usr/sbin/cwmpd
 1178 root      3600 S    /usr/sbin/cwmpd
 1179 root      3600 S    /usr/sbin/cwmpd
 1180 root      3600 S    /usr/sbin/cwmpd
接下來是Linux標準的 iwevent,的作用是把WiFi的Event,由Kernel傳到 User Space,在把他記錄到 syslog 當中。
 1192 root      1336 S    iwevent --syslog
下面四個是系統的Process,暫時不解釋了。
 1293 root         0 SW   [hlink_work_queu]
 1303 root         0 SW   [wlan_workqueue/]
 1304 root         0 SW   [csa_work_queue/]
 1383 root         0 SW   [mlmestats]
這隻神秘的程式是QTN專屬,沒有給Source Code。其實執行也有問題。
# qtmd -B <Enter> 
Error in qtm_netlink_server_init: nl_connect() failed
Error in main: Can't initialize netlink connection

 1393 root      1792 S    qtmd -B

終於看到我最有興趣的兩隻程式。hostapd 是整個WFi服務的核心。wpa_supplicant是搭配的密碼認證程式。

啟動程序是大致是 /etc/init.d/S50Wireless -> /scripts/start-helpers.sh ,這也會寫一個獨立Wi-Fi 啟動程序專章。

/usr/sbin/hostapd -P /var/run/hostapd.pid -B /mnt/jffs2
-P pid_file : 位於 /var/run/hostapd.pid
-B : 在背景執行
<configuration files> :系統設定檔的所在位置。/mnt/jiff 是一個檔案系統,這是會永久存在的。

/usr/sbin/wpa_supplicant -B -q -iwifi0 -bbr0 -Dmadwifi -c /mnt/jffs2/wpa_supplicant.conf
-B               : 在背景執行
-q                : 啟動 Debug message,如果 -qq 可以看到更多的信息。
-iwifi0        : interface name = wifi0,for 5G Wi-Fi, 那 2.4GHz 呢?
-bbr0          : optional bridge name = br0
-Dmadwifi : driver name = madwifi  
-c /mnt/jffs2/wpa_supplicant.conf : -c 是指定 configuration file

 1783 root      4248 S    /usr/sbin/wpa_supplicant -B -q -iwifi0 -bbr0 -Dmadwif
 1909 root      4264 S    /usr/sbin/hostapd -P /var/run/hostapd.pid -B /mnt/jff
 
接下來的一堆 Daemon qrpe, csmd, backhaul 組織成了Mesh的本體。接下來寫專章來做詳細的解析。
 2005 root      2768 S    qrpe -D -l off
 2022 root      1512 S    /bin/sh /scripts/cmdloop /usr/sbin/csmd -c /tmp/csmd.
 2025 root      4792 S    /usr/sbin/csmd -c /tmp/csmd.conf
 2026 root      4792 S    /usr/sbin/csmd -c /tmp/csmd.conf
 2027 root      4792 S    /usr/sbin/csmd -c /tmp/csmd.conf
 2028 root      4792 S    /usr/sbin/csmd -c /tmp/csmd.conf
 2029 root      4792 S    /usr/sbin/csmd -c /tmp/csmd.conf
 2031 root      4792 S    /usr/sbin/csmd -c /tmp/csmd.conf
 2042 root      1512 S    /bin/sh /scripts/cmdloop /usr/sbin/backhaul_manager
 2043 root      1512 S    /bin/sh /scripts/cmdloop /usr/sbin/backhaul_diagnose
 2050 root      2648 S    /usr/sbin/backhaul_diagnose
 2051 root      2136 S    /usr/sbin/backhaul_manager
 2065 root      4792 S    /usr/sbin/csmd -c /tmp/csmd.conf
 2069 root      4792 S    /usr/sbin/csmd -c /tmp/csmd.conf
 2070 root      4792 S    /usr/sbin/csmd -c /tmp/csmd.conf
這個是QTN無線的監督伺服器,用來做一些QTN私有的管理工作。
 2085 root      2248 S    qserver -B -i wifi0 -D quantenna
接下來是小型Deamon 提供 DNS, DHCP, Router advertisement與 Network boot (tftp)。
 2122 root      1112 S    dnsmasq -d
這個小程式監督GPIO PIN,包含重開機(Reboot)與Reset to factory (主要是把所以Flash當中改過的資訊回復到出廠時的設定)。 

 2150 root      2112 S    monitor_reset_device 1 0

這也是一個網路的監督程式,主要是看封包,CLIENT也是有例子,可以在本機執行,也可以在NP上面跑。位於目錄的 test 之下。

 2231 root      1224 S    /usr/sbin/pktlogger_d

這個自然是掃 DFS Channel的背景程式,其實他也沒有甚麼掃,因為是晶片在做,主要是讀取dfs_daemon.conf 之中的設定值,然後對硬體做設定,接下就等者收系統發出的資訊。
 2258 root      2184 S    dfs_daemon
 2275 root      1096 S    ts -n /etc/init.d/S55qwe start directly
 2306 root      1512 S    listen
 2312 root      1520 S    /bin/sh /scripts/offline_dump on
 2412 root      1520 S    /bin/sh /scripts/start-ntpclient
 2528 root      1512 S    /bin/sh /scripts/cmdloop /sbin/qharvestd -c/mnt/jffs2
 2534 root      5104 S    /sbin/qharvestd -c/mnt/jffs2/qharvestd.conf
 2618 root      3504 S    /sbin/mini_httpd -r -u root -C /mnt/jffs2/minihttpd.c
 2838 root      1504 S    cat /sys/devices/virtual/net/wifi0/wps_button
 3039 root      3600 S    /usr/sbin/cwmpd
 3044 root      2128 S    /sbin/tti_led_control
 3055 root      2112 S    monitor_wifi
 3056 root      1512 S    /bin/sh /root/script/tti_led24_control.sh
 3189 root      1512 S    /bin/sh /scripts/cmdloop /usr/sbin/crond -f
 3195 root      1520 S    /usr/sbin/crond -f
syslogd 的記錄檔案,預設值為 /var/log/messages。
-L : Local only, -R 也可以送到 remote server。
-n : Run in foreground ???

 3198 root      1520 S    /bin/sh /scripts/run_syslogd start
 3199 root      1528 S    /bin/sh -l
 3209 root      1512 S    syslogd -n -L

下面的程式似乎都是 2.4GHz Realtek 網卡相關的,似乎2.4GHz 是另外一個系統。各搞各的。
Webs這程式只是把 /root/script/init.sh 執行,把 realtek 的 2.4GHz init 執行起來,接下來就無所事事了。掉在一個 for (;;) sleep(5) 之中,甚麼也沒做。

 3306 root      1032 S    /root/webs -x

/root之下全部都是 Realtek 的程式,wscd就是 AP daemon。他的CONF檔案也放在不同的地方:
/var/wpa-wlan0.conf
/var/wsc-wlan0.conf

 3518 root      1272 S    /root/wscd -start -c /var/wsc-wlan0.conf -w wlan0 -fi

這個程式就是印 2.4GHz Wi-Fi 卡所發出的一些 Messags 而已,把Protocol Name 轉成英文。

 3536 root      1064 S    /root/iwcontrol wlan0

這個Shell ( /bin/qweeventd) 似乎是為了統一資訊而寫的,他會依照l iwevent 送出的訊息,轉成 QTN的命令。

 3605 root      1520 S    /bin/sh /bin/qweeventd
 3606 root      1336 S    iwevent
 3607 root      1520 S    /bin/sh /bin/qweeventd

沒有留言:

張貼留言