《LINUX设备驱动程式》第三版介绍的tiny_tty模块源码是基于2.6.10内核的,在2.6.32内核编译时有一些因接口变化而引入的错误。
修改后的源码文件可以从链接下载:https://download.youkuaiyun.com/download/kingtj/10692084
下面是关于错误和更正的说明。
编译
如果内核源码不是位于默认路径,则修改Makefile的“KERNELDIR"变量所对应的路径。
CFLAGS was changed in ".../tty/Makefile". Fix it to use EXTRA_CFLAGS.
更改Makefile的 CFLAGS 变量名为 EXTRA_CFLAGS .
fatal error: linux/config.h: No such file or directory
头文件config.h已经不存在了,删除语句: #include <linux/config.h>
error: ‘struct tty_struct’ has no member named ‘flip’
error: ‘TTY_FLIPBUF_SIZE’ undeclared (first use in this function)
这两个定义已经移除了,修改 tiny_timer 的代码如下:
为了方便测试输入,下面代码多个小改动使其间隔输入一个换行符’\n’。
static void tiny_timer(unsigned long timer_data)
{
...
for (i = 0; i < data_size; ++i) {
tty_insert_flip_char(tty, data[i], TTY_NORMAL);
if ((++tiny->rx_count % 10) == 0)
tty_insert_flip_char(tty, '\n'