文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>运行ldd2示例的一点体会

运行ldd2示例的一点体会

时间:2006-05-06  来源:lanttor.guo

注: 我使用的是redhat 9操作系统,内核版本是linux-2.4.20-8. 运行LDD2(linux设备驱动程序设计第2版)的示例.一点体会,仅供linux驱动学习者参考.

首先确定你的linux系统安装了内核源码树,在/usr/src下可以查看.
其次,安装好源码树后,在/usr/src下建立一个符号链接: ln -s /usr/src/linux-2.4.20-8 linux, 这个符号链接在驱动例子中用到.

下载驱动例子ldd2-samples-1.0.1.tar.gz后,用tar xvzf解开.

运行make命令,发现错误提示:
make[1]: Entering directory `/home/guotaotao/ldd2/ldd2-samples-1.0.1/misc-progs'
cc -O2 -fomit-frame-pointer -Wall -I/usr/include    asynctest.c   -o asynctest
cc -O2 -fomit-frame-pointer -Wall -I/usr/include    nbtest.c   -o nbtest
cc -O2 -fomit-frame-pointer -Wall -I/usr/include    setconsole.c   -o setconsole
cc -O2 -fomit-frame-pointer -Wall -I/usr/include    setlevel.c   -o setlevel
/tmp/ccSX988D.o(.text+0x1c): In function `syslog':
: undefined reference to `errno'
/tmp/ccSX988D.o(.text+0x89): In function `main':
: undefined reference to `errno'
collect2: ld returned 1 exit status
make[1]: *** [setlevel] Error 1
make[1]: Leaving directory `/home/guotaotao/ldd2/ldd2-samples-1.0.1/misc-progs'

查看misc-progs/setlevel.c, 在其中加入头文件#include <errno.h>.

继续运行make命令,发现错误提示:
make[1]: Entering directory `/home/guotaotao/ldd2/ldd2-samples-1.0.1/misc-modules'
gcc -Wall -D__KERNEL__ -DMODULE -I/usr/src/linux/include -D__SMP__ -DSMP -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h -O2 -I..   -c -o faulty.o faulty.c
gcc -Wall -D__KERNEL__ -DMODULE -I/usr/src/linux/include -D__SMP__ -DSMP -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h -O2 -I..   -c -o sleepy.o sleepy.c
gcc -Wall -D__KERNEL__ -DMODULE -I/usr/src/linux/include -D__SMP__ -DSMP -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h -O2 -I..   -c -o silly.o silly.c
In file included from silly.c:38:
/usr/src/linux/include/linux/malloc.h:4:2: #error linux/malloc.h is deprecated, use linux/slab.h instead.
make[1]: *** [silly.o] Error 1

查看/usr/src/linux/include/linux/malloc.h, 将其中的这条程序语句#error linux/malloc.h is deprecated, use linux/slab.h instead. 注释掉.

继续运行make命令,发现错误提示:
gcc -Wall -D__KERNEL__ -DMODULE -I/usr/src/linux/include -D__SMP__ -DSMP -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h -O2 -I..   -c -o simple.o simple.c
simple.c: In function `simple_remap_mmap':
simple.c:134: warning: passing arg 1 of `remap_page_range_R2baf18f2' makes pointer from integer without a cast
simple.c:134: incompatible type for argument 4 of `remap_page_range_R2baf18f2'
simple.c:134: too few arguments to function `remap_page_range_R2baf18f2'
make[1]: *** [simple.o] Error 1
make[1]: Leaving directory `/home/guotaotao/ldd2/ldd2-samples-1.0.1/simple'
make: *** [subdirs] Error 1

查看simple/simple.c,将这条程序语句    if (remap_page_range(vma->vm_start, offset, vma->vm_end-vma->vm_start,
                vma->vm_page_prot))
更改为
    if (remap_page_range(vma,vma->vm_start, offset, vma->vm_end- vma->vm_start, vma->vm_page_prot))

原因是在linux内核2.4.21中内核函数remap_page_range()的声明发生了变化,该函数在/linux/mm/memory.c中声明,原型如下:
 int remap_page_range(struct vm_area_struct *vma, unsigned long from,
                      unsigned long phys_addr, unsigned long size, pgprot_t prot),可以看到参数的数量多了一个vma。

继续运行make命令, 所有例子程序编译通过. 我们可以阅读其代码, 运行示例了.

 
 
相关阅读 更多 +
排行榜 更多 +
浴血混战官方下载

浴血混战官方下载

飞行射击 下载
检票员模拟器免广告下载

检票员模拟器免广告下载

模拟经营 下载
最终前哨最终版手机版下载

最终前哨最终版手机版下载

休闲益智 下载