|Life| 你的重點呢?

我帶走最重要兩句話:

你的結論呢?重點是什麼?

所以,Root Cause 是什麼?

 

這兩句話,不管是在工作上,或是思考人生方向,聆聽別人說話,都是十分有用的。
他會一直在耳邊回想,提醒你:所以,你要的是什麼?

|Jobs| 系統廠工程師需要具備的 Linux 相關知識

  • IPC 溝通有許多方式(兩個 process 互相交換資料的方法)
  • 何時要開 proccess,何時用 multi-thread 就好
  • In C language, system()
  • Makefile 如何寫
  • 系統默認路徑
    • Include 系統默認搜尋範圍: /usr/include/usr/local/include
    • Lib 預設目錄: /lib、/usr/lib、/usr/local/lib
      • 環境變數 LD_LIBRARY_PATH 中指向搜索路徑
      • /etc/ld.so.conf 文件中增加搜索目錄
    • 執行檔預設目錄: 如果不加 ./ ,預設是執行 /bin、/usr/bin

|Jobs| How can operators detect tethering?

出國玩,買 SIM卡 一定要注意,這張卡是否能夠當作 WiFi hotspot 分享給別人,

有的卡是不行的哦!!

 

在某次出差 (2017),我發現,電信業者是有能力知道這張 SIM卡是否有能力 WiFi hotspot,並且禁止這張卡做分享。

我一直以為是 framework 的行為(軟體端去擋),但是我做了一些實驗,發現電信商是可以控制的。(最近的新案子也有談到類似的東西)

表示在卡號之外,你這張卡是否有分享給別人,或者,
別支手機是否透過分享上網的,這兩個一定有其中一個資訊會被電信商知道。

 

稍微上網查了一下,電信商可以偵測到以下資訊,推斷出
你是否正在分享給別人/你是否是透過不能分享的網路上網

How can phone companies detect tethering (incl. Wifi hotspot)

  1. Your phone tells your network that you are tethering
  2. Inspecting the network packets for their TTL (time to live)
  3. MAC address inspection
  4. TCP/IP Stack Fingerprinting
  5. Looking at the Destination IP/URL

 

特別是去英國,要查一下你的卡哦!

Tethering on UK Networks: Which Mobile Networks Allow You To Tether?

|Jobs| 系統廠軟體工程師生存守則

  1. 一開始的 domain knowledge 問同事
  2. 環境建置問同事 + 文件囉
  3. Unit Tests 可以幫助你了解這產品做什麼
  4. 了解文件從哪取得
  5. 縮寫很多 要去查出來並理解
  6. 先知道做什麼 -> 看文件與流程 -> 對照 log 去 Trace code
  7. 以事件為單位 去 trace code
  8. 文件盡量直接從原廠找最新的,自己家的設計才是問同事或 PM
  9. 看懂 function pointer, macro
  10. 注意晶片廠自己定義的 structure 與 型別
    例如: bool v.s. boolean
  11. 各層之間傳遞, 都是用 command (message)
    要弄清楚幾個詞的意義與方向:
    Indicator(單純從底層報訊息上來的東西)
    Request(從上層要問底層資訊的)
    Response(底層回給上層的)
    Unsolicited(單方向的發送)
    Solicited(有一問一答的)
    Notification(單方向的發送)

另外,Open source library 使用時要注意權限。

系統廠就是要學會如何用原廠資源兜出客戶要的東西。各種組合出神奇的產品。

Code 兜的好,生存沒煩惱。

|Design| Make a cache in your program.

Cache 原意是指存取速度比一般隨機存取記憶體(RAM)快的 SRAM。
但在軟體中,就是指:暫存的機制。
目的是:降低存取一些值的代價。

你可以不用為了某個值,每次都要去問底層。
或者,某些 indicator 更新太頻繁,但你不希望上層跟著一直做無意義的更新,就會需要一個 Cache (很像 Temp 去接著它)。

 
比較常見的例子:
瀏覽器的 Cache 功能是可以減少你抓取資料的時間。

|NEWS| What is Rich Communications Services (RCS) ?

有錢的通訊服務,提升之後更能從使用者身上刮錢提高使用手機服務的品質。

主要提升三項手機的基本服務:簡訊、電話簿、通話品質。

是說這年代誰還在用手機講電話?

RCS 簡訊,可以直接傳送圖片影音,甚至是完成購物的流程,這樣難道不夠噱錢嗎?

這行為是不是讓我們很熟悉?LINE!!! 最近還開通了轉帳服務呢!

也就是說,到時候可能這些 APP 會跟 RCS 正面衝突呢?

不過,RCS 最重要還是依賴電信商 (Mobile Network Operator,MNO) 支援與否 (因為需要 IMS core system),所以這一天還有一段時間。(軟體服務這邊,Android Framework 這邊看來是提供支援了,那對於手機設備應該難度就大幅降低了)

YouTube:6 0:54 / 1:15 Android Messages: The messaging app built for Android

也許可以整合:SMS (Short Message Service,簡訊服務) 及 MMS (Multimedia Messaging Service,多媒體簡訊)?

BTW. 也就是說,現在在台灣,如果看到手機上有 RCS 可以先關掉或停用 (反正台灣用不了),以免耗電。可以自己打 keywords 問辜狗我在說什麼 XD

 

ref.

GSMA:rcs-documentation

Google’s support for RCS

新一代RCS多媒體簡訊更普及了,Google公布43家支援業者清單,只發簡訊就內嵌購物按鈕!

Wiki – RCS

Google開始部署RCS,Android傳訊服務升級至多媒體 (2016)

|NEWS| 什麼? WiFi 跟 LTE 有可能會干擾?

呃 …… 不要緊張 沒那麼容易啦!

禮拜五有 RF 同事打電話跟我們部門說要測 WiFi(我們部門在此案子沒負責 WiFi),當然要問為什麼阿!聽說是要測看看會不會干擾??!!

 

查了一下,還真的是有可能耶!
Wlan + Bluetooth Channels:2400 – 2483.5 MHz
LTE band 7:2500 to 2570 MHz (UL), 2620 to 2690 MHz (DL)

兩個靠的還蠻近的。
(我只列 FDD 的,參考資料裡面也有列出 TDD)

BTW. LTE band 13 會干擾 GNSS (Global Navigation Satellite System)

ref.

In-Device Coexistence Interference – Rohde & Schwarz

 

延伸問題:TDD v.s. FDD?

最大差異大概就是使用國家:台灣與美國都是 FDD (學把拔,不是很正常嗎?)

ref.

LTE frequency bands

Wiki – LTE-TDD

Wiki – LTE

 

延伸問題:台灣的頻段?

電信商通常會說是多少 Mhz 來表示 LTE 所支援的頻道,

但是手機商通常用 band 來表示。所以最大效益就是:

針對你的門號,去挑選手機(反過來也可以)。

同樣 700Mhz 有 Band 12/13/14/17/28,不過台灣只有亞太有 band 28 …… 以此類推

對照表可以找 Wiki 或電信商官網或是
台灣4G LTE各業者頻寬頻段與使用技術整理比較

|Issue| dlopen ERROR: undefined symbol

我們可以利用 dlopen 載入動態函式庫,然後使用 dlsym 取得裡面的函式來使用。

這兩個方法使用方式可以參考:dlopen&dlsym 用法

有遇到載入失敗,出現:undefined symbol

後面接著一串很像函式名稱的東西。

那時候我猜測是有兩種可能:我函式有問題 (可是 compiler 應該不會過才對),或者,

沒有正確連結?

我使用 nm 去驗證我的想法。

nm 可以列出目標的所有 symbol,看是不是那個函式有在裏面,但有問題?還是那個函式真的沒有在裡面?

在 cmd line 執行:nm -C -D bad_lib.so

就會列出全部的 symbol。其中,-D 指的是察看的對象是動態檔唷!

 

還有一個小工具:ldd 順便介紹一下。

ldd (List Dynamic Dependencies) 可以尋找所使用的函式庫!

執行:ldd (選項) (參數)

就可以列出全部被用到的函式庫啦!

 

ref.

解決 undefined symbol / reference

 

|Issue| 將 .a 包進 .so後,無法使用 .so

Segmentation fault

–whole-archive:可以強制將每個對象包含在生成的共享函式庫裡

所以我把我要包進 .so 的 .a lib 都加上了這個參數

總算可以開啟 .so

*在 static 库中,连接器将停止在第一个符号,即使它是一个弱的,并停止寻找强大的。若要强制它查看所有符号( 就像对动态链接库所做的那样),ld 支持 --whole-archive 选项。

 

ref.

https://ask.helplib.com/others/post_12552910

WordPress.com.

Up ↑