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
張貼留言

[Linux] Private Key 不能登入的除錯方法與可能的問題點

最簡單的除錯方法是 $ ssh HOST -v 可能的問題點有: File/Dir Permission # 目錄是 700, 檔案是 600 Server 設定 RSAAuthentication yes PubkeyAuthentication yes...