邏輯要清楚,條理的記下來,雖不是寫論文,但應對要自如。
flowchart LR
json1([json1])
json2([json2])
json3([txt3])
json4([json4])
json5([json5])
json6([json6])
jsonA([jsonA])
cmd1[cmd1]
cmd2[cmd2]
cmd3[cmd3]
cmd4[cmd4]
cmd5[cmd5]
cmd6[cmd6]
cmdA[cmdA]
subgraph v1
cmd1 --> json1
cmd2 --> json2
cmd3 --> json3
cmdA --> jsonA
end
json1-->cmd4
json2-->cmd4
json3-->cmd5
subgraph v2
cmd4 --> json4
cmd5 --> json5
end
json4-->cmd6
json5-->cmd6
subgraph v3
cmd6 --> json6
end
從收到板子+SDK,
整理 codebase
進到版本控管
編譯流程
軟體開毃、測試
版本升級、發佈
先設置電腦開發環境
1.1.1. VirtualBox (可選擇 VMware)
TYPE | SIZE |
---|---|
OS (/) | 128GB |
work (/dev/sdc) | 512GB |
opt (/dev/sdb) | 128GB |
A.2. VirtualBox 橋接網路介面
1.2. Client ubuntu 20.04 (建議選用 20.04)
/bin$ ll /bin/sh
lrwxrwxrwx 1 root root 4 九 10 2021 /bin/sh -> bash*
$ sudo chmod 777 /opt
$ sudo apt-get --yes install subversion-tools
$ sudo apt-get --yes install subversion
1.2.6. Ubuntu 20.04.1安裝Samba伺服器及配置
1.2.8. GNU / Linux 各種壓縮與解壓縮指令
- tar.gz
zip (不要使用,因為在linux 下不符合權限管理)
\ -> /
alias
apt-get
cat
cd
chmod
chown
cp
cut
date
diff
echo
export
find
grep
ifconfig
kill
ls
man
mkdir
mount
mv
patch
ping
pwd
rm
rmdir
scp
sed
sudo
tail
tree
xargs
vi
- 【Linux】linux/ubuntu/mac 基礎終端機 (terminal) 指令 & 基礎知識總整理,初學者/新手 必須知道的基礎指令 & 基礎知識大全(持續更新)
- 第十二章、學習 Shell Scripts
- Ubuntu 教學
avahi-browse
crontab
nslookup
service
systemctl
valgrind
2. LambdaHello
簡單的測試,看看會不會查尋檔案,找到對應的入口
找出程式進入點
??
這幾周最主要是建立 Cross Compile 的概念
安裝和啟動 PI
builds
output
bin
build_dir
tmp
開始程式寫作,因為是 Embedded Engineer,所以用 C 為主。
縮排:tab (2 spaces)
不縮排:
#ifdef
#endi
{ 置前:
if
{
}
if, while等,不使用單行表示,一定要用{}
ubuntu | ImageP | ImageY | ImageB | ImageO | |
---|---|---|---|---|---|
GCC (ubuntu) | OK | FAIL | FAIL | FAIL | FAIL |
GCC (pi) | FAIL | OK | |||
ToolY | |||||
ToolB | |||||
ToolO |
SIGHUP 1 Hangup detected on controlling terminal or death of controlling process
SIGQUIT 3 Quit from keyboard
SIGKILL 9 Kill signal
SIGTERM 15 Termination signal
SIGUSR1
SIGUSR2
A. atexit
加強一些網路的基本概念和應用。
A. libuv
11. Wireshark
$ python -m SimpleHTTPServer
$ avahi-browse -r -t _printer._tcp
$ avahi-browse -r -t _http._tcp
$ avahi-browse -r -t _ssh._tcp
針對常會使用的功能進行訓綀。
12. json 操作 - jansson
請使用此 utilx9 寫出程式碼
{
staff: [{
"Last Name": "Hsu",
"First Name": "Lanka"
}, {
"Last Name": "Hsu",
"First Name": "Mary"
}
]
office: {
"GUI number": "08449449"
}
}
請完成
add, delete, update
save to file, load from file
請使用此 utilx9 寫出程式碼
# 監聽
$ sudo dbus-monitor --system
flowchart LR
P-A .-> |D-Bus| P-B
P-A .-> |D-Bus| P-C
P-A .-> |D-Bus| P-D
sequenceDiagram
participant A as A
participant B as B
A->>B: signal, destination=(null destination) path=/com/github/lankahsu520 interface=com.github.lankahsu520 member=command<br>string "hello"
if (payload)
{
DBG_WN_LN("(payload: %s)", payload);
dbusx_signal_str(dbusx_ctx_get(), DBUS_S_IFAC_YK_UP_FORMATTER_NOTIF, DBUS_S_NAME_ZIP, payload);
}
flowchart LR
P-A .-> |D-Bus| P-B
P-A .-> |D-Bus| P-C
P-A .-> |D-Bus| P-D
sequenceDiagram
participant A as A
participant B as B
A->>B: method call, destination=com.github.lankahsu520 path=/com/github/lankahsu520 interface=com.github.lankahsu520 member=command<br>string "hello"
B->>A: method return,<br>string "Got !!!"
char *msg = NULL;
SAFE_ASPRINTF(msg, QUERY_FILENAME_SERVER_XML "?" QUERY_KEY_SETFORSCAN);
if (msg)
{
char *retStr = dbusx_method_str2str(dbusx_ctx_get(), DBUS_DEST_YK_P2P_DAEMON, DBUS_M_IFAC_YK_P2P_DAEMON_COMMAND, DBUS_METHOD_COMMAND, msg, TIMEOUT_OF_DBUS_P2P);
DBG_IF_LN("(msg: %s, retStr: %s)", msg, retStr);
SAFE_FREE(retStr);
SAFE_FREE(msg);
}
mindmap
Platform
Bootloader
BIOS
UEFI
Uboot
Operating system
Windows
Linux
macOS
Processor
[32-bit]
[64-bit]
Endianness
[Big-Endian]
[Little-Endian]
Architecture
ARM
MIPS
X86
MCU
Connecter
TTY
USB
I2C
I2S
GPIO
Disk
Flash
SSD
SD card
Dual Images
mindmap
Platform
SDK
System integration
Yocto
Buildroot
OpenWRT
Language
C, C++
Python
Node.js
cargo/rustc
Clang
Compiler
Cross
Native
[libxxx-dev]
Build tools
make
cmake
meson
Python
Perl
Shell script
Ninja
npm
Runtime dependency
library
參考資料和網址
I.1. GitHub
善用網路上的資源
I.2. GitLab
善用網路上的資源
I.3. SVN vs. Git
版本控管的基本操作一定要知道,不記得上網查。但是不能不會,也不要奢望別人會教你。
$ SVN_USER=mary
$ svn co --username $SVN_USER http://xxx/xxx/$SVN_USER
# commit and push
$ svn ci
# update, pull
$ svn up
# add file(s)
$ svn add
$ svn add --no-ignore
# changed files
$ svn st -q
# not under version control
$ svn status | grep -e ^?
遇到的問題和解決方法
專有名詞和解釋
一句話,樣品或開發板。
[ChatGPT]
"EVK" 是 "Evaluation Kit"(評估套件)的縮寫。評估套件是一種硬體和軟體組合,旨在協助開發人員、工程師或製造商評估、測試和開發新的硬體或軟體產品。EVK 可能包含特定硬體設備、開發板、擴展模組、軟體工具和文檔,以協助使用者在特定領域或應用中進行評估和開發。
EVK 的主要用途包括:
- 產品評估: 開發人員可以使用 EVK 來評估新的硬體或軟體產品的性能、功能和適用性。這有助於決定是否值得進一步開發和生產該產品。
- 原型開發: EVK 可用於快速原型開發。開發人員可以使用提供的硬體和軟體工具來建立概念驗證原型。
- 驅動程式開發: 如果 EVK 包含特定的硬體設備,開發人員可以使用它來開發硬體驅動程式或軟體應用程式,以支援這些設備。
- 性能測試: EVK 可用於進行性能測試和基準測試,以確保硬體或軟體在特定工作條件下運行正常。
- 教育和培訓: 學術機構、培訓機構和工程團隊可以使用 EVK 來教授和培訓人員,使他們熟悉特定技術或產品。
- 開發環境: EVK 提供了一個開發環境,開發人員可以在其中編寫、測試和調試軟體代碼。
EVK 可能用於各種不同的應用,包括嵌入式系統、物聯網(IoT)設備、通訊設備、半導體元件和軟體開發。它們通常由硬體或軟體供應商提供,以幫助客戶評估並開發相關產品。 EVK 在簡化開發過程、節省時間和成本方面發揮重要作用。
一句話,就是協助硬體工程師開發的資源和工具。
[ChatGPT]
Hardware Development Kit(硬體開發套件,縮寫為HDK)是一種工具套件,用於協助硬體工程師和製造商設計、開發和測試硬體產品。這些套件通常包括一系列的硬體和軟體資源,以協助開發人員在硬體領域中進行評估、原型開發和產品製造。
以下是一些硬體開發套件(HDK)的常見特點和元件:
- 原型板(Development Board): HDK 可能包含特定用途的原型板,這些原型板通常設計用於測試硬體電路和元件。它們提供了一個實驗室,允許工程師快速測試和驗證他們的硬體設計。
- 電子元件: HDK 可能提供各種電子元件,如處理器、儲存器、傳感器、連接器等,這些元件可以用於構建原型和硬體設計。
- 設計工具: HDK 包括用於硬體設計的軟體工具,如電路設計軟體、布局工具、原理圖軟體等,這些工具有助於設計硬體電路。
- 軟體支援: 有時 HDK 包括與硬體相關的軟體支援,例如驅動程式、示例程式碼、操作系統映像等,以協助開發人員編寫和測試軟體。
- 文檔: HDK 提供了詳細的技術文檔、用戶指南和參考資料,以幫助工程師了解和使用硬體套件。
- 示例項目: HDK 可能包括示例項目或應用程式,以展示如何使用硬體和軟體資源來實現特定功能。
HDK 的目標是簡化和加速硬體產品的開發過程,並確保它們符合特定的要求和標準。這些套件通常由硬體製造商、半導體公司或硬體設計公司提供,以協助客戶設計和開發各種硬體產品,包括嵌入式系統、通訊設備、儀器儀表、消費電子產品等。
一句話,就是協助軟體工程師開發的資源和工具。
[ChatGPT]
SDK 是 "Software Development Kit"(軟體開發工具包)的縮寫,它是一組工具、函式庫、文檔和示例程式碼的集合,用於協助軟體開發人員創建特定平台、框架或應用程式的軟體。SDK 旨在簡化和加速軟體開發過程,提供必要的資源和工具,以便開發人員可以有效地設計、開發和測試軟體。
以下是 SDK 的一些常見特點和用途:
- 函式庫和 API: SDK 包含函式庫和應用程式編程介面(API),使開發人員可以訪問特定平台或框架的功能。這些函式庫和 API 提供了一組預先定義的函數和類,可以用於實現特定任務。
- 開發工具: SDK 包括用於編譯、除錯和測試代碼的工具,如編譯器、集成開發環境(IDE)、模擬器和調試器。
- 示例程式碼: SDK 提供示例程式碼,開發人員可以參考這些範例來了解如何使用 SDK 中的功能。
- 文檔和教程: SDK 通常包括詳細的技術文檔、API 文件和教程,以幫助開發人員學習如何使用 SDK 中的工具和資源。
- 模擬和測試環境: 一些 SDK 包括模擬和測試環境,讓開發人員可以在模擬的環境中測試應用程式,而無需實際硬體或軟體。
- 支援多平台: 一些 SDK 設計為支援多個操作系統或硬體平台,使開發人員能夠跨平台開發應用程式。
SDK 可以用於各種不同的應用,包括移動應用程式開發、網頁開發、遊戲開發、嵌入式系統開發、物聯網(IoT)應用程式開發等。它們通常由平台或框架的提供者提供,以協助開發人員在特定環境中創建高質量的軟體。
相關執行程式的參數
IV.1.1. Notepad++
IV.1.2. Source Insight
IV.5. DIVVY - 分割視窗
Created and designed by Lanka Hsu.
HelperX is available under the BSD-3-Clause license. See the LICENSE file for more info.