2010/03/16

[Linux] Kernel Module 帶入 Parameter 以及 Endian 的問題

最近參與的工作有在玩 Kernel 的部份,首先要做兩個 Kernel Module 的常見任務介紹:
1. Module 帶入 Parameter 的部份.
其實也很簡單,在 module 定義 macclone 這個變數,再用 module_param 帶入它的值。
static short int macclone = 1;

module_param(macclone, short, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
MODULE_PARM_DESC(macclone, "An Short");

int init_module(void)
{
struct net_device *ndev = NULL;

printk("a = '%d'\n", macclone);


應用時,是用 sudo insmod hello macclone=1
這樣帶進去的。詳細的部份,可以參考 LinuxTopia (中文是翻作 「Linux 討皮癢」嗎?)上面的說明。

2. C code 裡面應用 Little Endian 和 Big Endian 的部份.

單純的 C code 如果要應用 Little Endian 和 Big Endian 的分別其實可以直接 include endian.h 就可以:
#include <stdio.h>
#include <endian.h>

int
main()
{
#ifdef LITTLE_ENDIAN
printf("little\n");
#else
printf("big\n");
#endif

return 0;
}

如果沒有 endian.h 可以用,像是在 kernel 裡面決定 endian (下面我不確定是最佳解...),可以用在 這邊 的 blog 提到 IBM 網站上找到的資料:
const int endian = 1;
#define is_bigendian() ( (*(char*)&endian) == 0 )
union {
int val;
unsigned char c[sizeof(int)];
}u;


--
參考網址:
關於 little endian 和 big endian
Big Endian 和 Little Endian
Linuxtopia
張貼留言

[Windows] 好用的小工具: AutoHotKey

做為一個 Linux 的愛好者,轉移到 Windows 上面的時候,往往難以適應 Windows 調整快捷鍵的方式,所以 google 了一下,結果發現很多人愛用的 "Auto Hot key"。不多說,就來給一個範例說明如何使用 Auto Hot key 來...