Embedded System 修課紀錄(6)

前幾個禮拜進度是 Linux driver 的教學實驗,但是呢連續兩週研究室要提報論文啊~這可是身為碩士生的最重要時程呢。加上助教課程中不斷說明 Device driver 的用意和原理,實際運作的部份鮮少提及,課程講義中有給兩個 Source Code 一個是簡單的掛載並輸出簡易資訊,另一個是控制周邊的 LED 設備。

論文提報(5/5)後,一定要認真看 LED driver 的原始碼啊!畢竟還有加分題要處理....

編譯撰寫好的 Linux driver
  • 以下是 Hello World 原始碼

#include 
#include 

MODULE_LICENSE("Dual BSD/GPL");

static int __init hello_init(void)
{ 
 printk(KERN_ALERT "Hello World!\n");
 return 0;
}

static void __exit hello_exit(void)
{
 printk(KERN_ALERT "Goodbye, cruel world!!\n");
}

module_init(hello_init);
module_exit(hello_exit);

上述是簡單的初始化以及結束元件之操作,以下快速的將之前的操作帶過

// setup toolchain
cd ~
mkdir lab7_project
tar -zxvf arm-linux-toolchainbin.4.0.2.tar.gz
export PATH=/home/sn/lab7_project/opt/microtime/pro/devkit/arm/pxa270/gcc-4.0.2-glibc-2.3.3/arm-unknown-linux- gnu/bin:$PATH

// patch up kernel source
tar -zxvf mt-linux-2.6.15.3.tar.gz
cp linux-2.6.15.3-creator-pxa270.patch /home/sn/lab7_project/microtime/pro/devkit/lsp/create-pxa270/
cd ~/lab7/microtime/pro/devkit/lsp/create-pxa270/
patch -p0 < linux-2.6.15.3-creator-pxa270.patch

//make image
cd linux-2.6.15.3
make mrproper
make creator_pxa270_defconfig
make clean
make
  • 編譯 Hello module 原始碼
make
產生出來的 hello.ko 是要用來掛載的 Linux driver

將 Driver 掛載到 Kernel 

有以下指令可以操作掛載行為,分別是:insmod(掛載), rmmod(移除掛載),如果要檢查已經掛載的狀態可以用 ismod
  • 接著在 ARM pxa270 操作
// 掛載 storage device
mount -t vfat /dev/sda1 /mnt/sda1
cd /mnt/sda1

// 掛載 linux driver
insmod hello.ko
// 移除掛載 linux driver
rmmod hello.ko
因為板子空間有限,所以後續許多操作或是程式碼盡量在 usb 裝置上操作囉。如果檔案比較小的話,可以透過之前所說的 tftp 來做下載的行為操作,指令如下所示:
tftp –g –r hello.ko server_ip_address
值得注意的是,掛載和移除都會有訊息出現,因為程式碼有簡單得 output 喔。

Reference

[1.] opencsl.openfoundry.org::Lab 8 device driver

Comments

Popular Posts