2009年8月8日 星期六

The GNU MP Bignum library

最近因為工作上客戶要求要做 RSA verify 的動作來確保 image 是沒被改動過的..
一開始是參考 openssl ..
在看 RSA 的部分..發現其實 RSA 主要是有一個 big number 的 libaray ..
然後做 big number 的運算..說實在並不是很複雜..
另外看了其它有關 RSA 的 libaray..也都是這樣子..
所以就打算放棄 porting openssl 這個功能超強的大怪物~~只拿 openssl 來當驗證用..
就找了 axTLS 這個 SSL library 來改..把 RSA 的 module 整個抽出來...
還算幸運..花了大概一天的時候把 RSA 的 code 整個抽出來..
然後驗證抽出來的 code 是沒問題的..另外再花了半天的時候把 code port 到我們的環境上...
不過對於 code size 上不是很滿意..目前 RSA 的部分花了大概是 6KB ..
很想把 code size 縮到 5KB 左右..看起來佔 code size 最多的就是 big number 的部分..
所以就上網找了一下..是不是其它的 libaray..
找到了 The GNU MP Bignum library
號稱是 the fastest bignum library on the planet!
不過是 GPL 的 code 就沒特別看了~~只是單純記錄一下下~~:)

2009年6月5日 星期五

IRQ and INT

IRQ 指的是 HW 連接至 PIC 上的 pin number
INT 指的是 interrupt vector 的 number


"软中断一般是指由指令int引起的“伪”中断动作——给CPU制造一个中断的假象;而硬中断则是实实在在由8259的连线触发的中断。因此,严格的讲,int与IRQ毫无关系,但二者均与中断向量有关系。int引起的中断,CPU是从指令中取得中断向量号;而IRQ引起的中断,CPU必须从数据线上取回中断号(硬件引发中断首先加到8259的某个IRQ引脚上,8259根据定义好的规则换算出相应的中断向量号,将其放在数据线上,然后通知CPU中断到来)。接下来CPU的工作就一样了:保护现场、根据中断号得到中断处理程序地址、执行中断处理、恢复现场继续执行被中断的指令。Windows驱动程序一般不能直接接管中断,中断是由内核的VPICD接管,驱动程序只是向VPICD注册中断服务,中断服务将由VPICD调用。这样可以有效的实现虚拟设备:虚拟不存在的设备或者改变已存在的物理设备的行为。"

-- from http://topic.csdn.net/t/20011227/16/445451.html#

2009年5月26日 星期二

Use git on your local computer

對於 git 的使用相當的陌生
但很喜歡的用 git diff 產生出來 patch 的 format

git 也可以用在自己 local 的電腦上..
下面是自己建立 local repo 的方法

1. mkdir -p /home/git
2. cd /home/git
3. tar xvfj linux.tar.bz2
4. cd linux
5. git init
6. git add .
7. git commit

當你需要 clone 一份 code 的時候..可以下
git clone /home/git/linux mylinux

之後當你在 mylinux 下修改檔案後
就可以用 git diff 來產生 patch 了~~

2009年5月16日 星期六

User space RCU library relicensed to LGPLv2.1

User space 也有 RCU (Read-Copy Update) 可以用了!
Userspace RCU library


雖然不太了解 RCU 的真正用途是什麼..是知道是可以讓 data share 給很多人同時使用...
機制不明..

What is RCU, Fundamentally?
這裡有說明..覺得還蠻有興趣..再找時間看看...
如果可以運用於 user space multithread 的程式上的話...
應該是很不錯的~~

另外這個 project hosted 在 LTTng 上 ..
因為 LTTng 要用~~

2009年5月7日 星期四

Fixup in the very early time

start_kernel(void)
{
...
setup_arch(&command_line);
-> early_quirks(); /* can do chipset fixup */
...
acpi_early_init(); /* Enable ACPI */
...
...
}

early_quirks() 這個點可以在很早的時候就 fixup 一些奇怪的 bug
大部分都是 chipset 相關的 ...
這個點在 ACPI enable 之前...
也比所有的 initcall 都還要早 .... (initcall 其實己經算是很後面的..)