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] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...