日期:2014-05-16  浏览次数:20717 次

学习ldd3时按照书上的路径很多文件都找不到,谢谢
我用的是FC6   2.6.18   ,ldd3中的是2.6.10的内核,我想应该没多大区别吧,可是很多文件都找不到,例:①   usb.c都没找到,看USB时,发现usb文件夹里只有makefile,kconfig,至于makefile里面的文件用的locate命令,都没找到;②/proc/devices   应该有很多内容,打开看时是空白     ③Documentation/devices.txt也没有....
很多问题,不知道怎么解决,是版本的原因吗?

谢谢!

------解决方案--------------------
1.usb.c在linux内核源代码目录drivers\usb\core目录下,内核的makefile文件里面不会出现locate命令
2.我的/proc/devices里面是有很多内容,我的内核版本是2.6.17,请检查是否具有查看该文件的权限(该文件默认的访问权限是444)。
3.devices.txt这个文件是有的。最好从www.kernel.org上下载源代码包。
------解决方案--------------------
用find也可以找啊。
find . -name "usb.c "
------解决方案--------------------
关于ldd3编译环境的建立

uname -r
2.6.xx

cd /lib/modules/2.6.xx
ls -all
看看build和source两个链接指在哪里
如果该两个链接所指地方没有内容,那么就必须从光碟或者网上下载uname -r显示
完全一样的内核版本,才可编译成功,也就是说运行的内核并且要有和她完全样的
内核源码存在,上两个链接的路径是可以改变的
例如我的环境:
build -> /home/leno/linux-2.6.21.5
...
source -> /home/leno/linux-2.6.21.5
因为在编译的时候Makefile会用到上面点链接

如果都对了还有问题
就把Linux-Libc-Headers装到你电脑里,给个网页参考
http://lamp.linux.gov.cn/Linux/LFS-6.2/chapter06/linux-libc-headers.html#contents-linux-libc-headers



------解决方案--------------------
上面的说法似乎有些勉强。

如果该两个链接所指地方没有内容,那么就必须从光碟或者网上下载uname -r显示
完全一样的内核版本,才可编译成功
这个未必的吧,我写的驱动用不同内核版本的内核树可以编译成功并insmod通过。

只不过不能用$(MAKE) -C $(MODULES_SRC) M=$(PWD) modules这种编译方式而已

事实上大工程的Makefile通常也不会这样写,上述写法只用于小工程测试。

通常是
DFLAGS = -DMODULE -D.....

%.o: %.c
$(CC) $(CFLAGS) $(DFLAGS) -c -o $@ $ <
------解决方案--------------------
另外,to lz:

写驱动一定要用root用户,无论是insmod还是rmmod都是非root不可的。

内核树的/drivers/ust/core下是有很多源文件的,lz应该是内核树文件缺失,建议重装内核树