Q1:寫個 kernel module 印出 Hello World
A1:
module的行為
insmod的時候印出"Hello World!"
rmmod的時候印出"Goodbye, hello world"
掛module的平台 - Arm64平台(DB410C),DB410C的kernel與toolchain(系統開發)
當你要作交叉編譯時,一定要有Target Board(DB410C)的toolchain
在PC上面編譯,我利用toolchain把程式編譯成Target Board可讀的檔案
toolchain(工具的連結) GNU GCC
編譯器
連結器 (將原始碼/目的碼轉換成可執行程式檔)
函式庫 (提供與作業系統之間的介面)
除錯器 (用來測試、除錯所產出的程式)
////////////////////////////// HelloWorld.c //////////////////////////////////////
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk("Hello world!\n");
return 0;
}
static void hello_exit(void)
{
printk("Goodbye, hello world\n");
}
module_init(hello_init);
module_exit(hello_exit);
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// MakeFile /////////////////////////////////////
obj-m += hello.o
KERNEL=/home/danny/DB410C/kernel/kernel
all:
make -C $(KERNEL) M=$(shell pwd) modules ARCH=arm64
clean:
make -C $(KERNEL) M=$(shell pwd) clean
///////////////////////////////////////////////////////////////////////////////////////////
首先是必須給系統CROSS_COMPILE環境變數
給他toolchain的完整路徑
Process (行程,可稱作處理程序、進程)
給他toolchain的完整路徑
export CROSS_COMPILE=/home/Danny/DB410C/toolchain/gcc-linaro-4.9-2014.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
(請依照你的toolchain給定CROSS_COMPILE的值)
Makefile中KERNEL這個參數,必須要指定到PC上,Target Board(DB410C)的Kernel Source Code
Makefile中KERNEL這個參數,必須要指定到PC上,Target Board(DB410C)的Kernel Source Code
export CROSS_COMPILE=/home/Danny/DB410C/toolchain/gcc-linaro-4.9-2014.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
(請依照你的toolchain給定CROSS_COMPILE的值)
///////////////////////////////////////////////////////////////////////////////////////////
接著只需下make,hello.ko就會被產生出來
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
接著把hello.ko複製到Target Board上,接著執行
sudo insmod hello.ko
sudo rmmod hello.ko
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
輸入dmesg就可以看到driver印出的訊息囉!
///////////////////////////////////////////////////////////////////////////////////////////
Q2:Process Thread差異
A2:
Thread放在Proceess容器Program (程式)
寫的程式碼 (code) 的集合,尚未 load 進記憶體的程式碼,存在次級儲存裝置 (Secondary storage)。 一個 Program 可以執行多次,同時產生多個 Process。
Process (行程,可稱作處理程序、進程)
已經執行且 load 到記憶體中的 Program,行程中的每一行程式碼隨時都有可能被 CPU 執行。
在活動監控器 (mac) 或 jobs (linux) 中看到 PID,也就是執行中的 Process ID。
Process 又分以下兩項:
在活動監控器 (mac) 或 jobs (linux) 中看到 PID,也就是執行中的 Process ID。
Process 又分以下兩項:
1.Memory Space。相當於 Object 的 variable,不同 Process 的 Memory Space 也不同,
彼此看不到對方的 Memory Space。
2.一個以上的 Thread。
多工作業系統 (Multitasking Operating System) 可以同時執行數個 Process,
如何排程 (Scheduling)、如何有效管理記憶體 (Memory Management) 是(OS) 所關注的事。
彼此看不到對方的 Memory Space。
2.一個以上的 Thread。
多工作業系統 (Multitasking Operating System) 可以同時執行數個 Process,
如何排程 (Scheduling)、如何有效管理記憶體 (Memory Management) 是(OS) 所關注的事。
Process 是電腦中已執行 Program 的實體,每一個 Process 互相獨立。
Process 需要一些資源才能完成工作,如 CPU、記憶體、檔案以及 I/O 裝置。
Process 不是基本執行單位,而是 Thread (執行緒) 的容器。
每個 Process 由一個 Memory Space 和一個以上的 Thread 所組成。
Thread (執行緒,亦可稱作線程)
同一個 Process 中會有很多個 Thread,每一個 Thread 負責某一項功能。
聊天室 Process 為例,可以同時接受對方傳來的訊息以及發送自己的訊息給對方,
就是同個 Process 中不同 Thread 的功勞。Thread 就是實體工廠內的工人,
確保工廠的每項功能,並且共享工廠內的每一項資源。
聊天室 Process 為例,可以同時接受對方傳來的訊息以及發送自己的訊息給對方,
就是同個 Process 中不同 Thread 的功勞。Thread 就是實體工廠內的工人,
確保工廠的每項功能,並且共享工廠內的每一項資源。
Thread 又分兩項:
Stack:紀錄從某個起始點開始 (例如main),到目前為止所有函數的呼叫路徑,
以及在這些呼叫路徑上所用到的區域變數。
以及在這些呼叫路徑上所用到的區域變數。
紀錄 CPU 內部的Register (如 Program Counter, Stack Pointer, Program Status Word 等) 狀態。
在多執行緒中 (Multithreading),兩個執行緒若同時存取或改變全域變數 (Global Variable),
可能會發生同步 (Synchronization) 問題。若執行緒之間互搶資源,可能產生死結 (Deadlock),如何避免 (Prevent) 或預防 (Avoid) 上述兩種情況的發生,仍是作業系統 (OS) 所關注的。
可能會發生同步 (Synchronization) 問題。若執行緒之間互搶資源,可能產生死結 (Deadlock),如何避免 (Prevent) 或預防 (Avoid) 上述兩種情況的發生,仍是作業系統 (OS) 所關注的。
Thread 是系統處理工作的基本單元。
一個 Process 會同時存在多個 Thread。
一個 Process 底下的 Thread 共享資源,如記憶體、全域變數 (Global Variable) 等
同一個 Process 內的 Thread 使用相同的 Memory Space,但這些 Thread 各自擁有其 Stack。Thread 能透過 reference 存取到相同的 Object,但是 local variable 各自獨立。
作業系統 (OS) 會根據 Thread 的優先權以及使用過的 CPU 時間,在不同的 Thread 作切換
何謂 process 何謂 thread
請描述 I2C read/write
簡述 multi thread ,mesage queue, system timer
OS如何保護自身不被應用破壞
1 字串swap
2 1+2+....+n
3 Design Patten
用最小 struct 來表示年月日分秒
宣告 MIN macro
宣告 macro 表示一年幾秒
malloc 字串
給一個 ISR,叫你判斷哪邊有誤
問了一些 uart
Linux 開發環境的 command,例如 tar
chromebook開機流程
sensor 在 embedded Linux 是怎樣的分層排序
接一個 touchscreen
移植 driver 後還是沒訊號就可能要量 bus
送event後,native layer要看有沒有接到event
fine tune,calibration
字串比對
1 swap
2 tree
3 link list
4 virtual function/override
5 指標
6 strcmp
7 給你個情境題,要你測出產品的極限
Embedded Linux 開機流程
driver 在 ISR,能夠睡的方法
process溝通有哪幾種方法
driver 呼叫到他的 driver function
字串反轉,另一個就型態轉換
I2C 和 SPI bus
system call
指標二維陣列
何謂中斷
問你如何設計一個指紋辨識 sdk
達到能夠啟動speaker跟recorder的Object
HW component跟SW driver,透過speaker driver去使用speaker
Operating System)的觀念
等差級數
何謂 callback
留言
張貼留言