如何突破 kmalloc 的限制

周五有人通过某渠道知道俺曾经做过 Linux 内核模块,于是特意来请俺午饭,问了我这个问题。kmalloc 好像是总共只能使用 2M 内存的,如果用更多的就只能用 vmalloc,但其性能很糟糕;我所知道解决办法非常简单:启动系统的时候增加一个 mem=xxx 启动参数,让内核不去管理后面的那部分内存,然后在模块里面把后面的内存映射过来获得一大块连续的地址,以后根据自己的需要在那块空间上操作就可以了。

不过说到后来,映射地址的函数是什么记不得了,回到计算机前 google 了好几个关键词,最后终于确认是 ioremap 这个函数,赶快记在 blog 里,避免下次遗忘。

回想起来作为一个 C 程序员其实挺幸运的:这意味着在计算机上你可以做任何事情(前提是一个 Linux or BSD 操作系统);而且随着经验增长,去理解其他语言不是难事——由 C 入 script 易,由 script 入 C 难。

再转载一篇好玩的报导:某人做了个统计,2.6.22 内核代码中共有 151,809 的结尾空白字符;如果提交 patch 把它们全部去掉的话,那么大概需要一个 15M,共 455437 行 的 patch。然后有人指出,在 2001 的统计是有 224,654 个结尾空白,看来这几年黑客们确实是在卖力地去除空格。突然想到一个问题,vim 或 emacs 都应该能配置成自动去除尾空格吧?

Topic: 技术