linux设备驱动开发详解——globalmem
常见的两种错误:
1.在插入模块的时候出现如下问题:
# insmod globalmem.ko insmod: error inserting 'globalmem.ko': -1 Device or resource busy
ANSWER:主设备号被占用了,换另一个。 你把globalmem.c文件里面的宏定义那里改为226或其他,然后再编译就可以插入了!
特别注意: 如果换了主设备号以后,下面接着创建节点的时候也要该,否则出现下面错误:
# mknod /dev/globalmem c 254 0 /*这里的254跟已修改的主设备号228不一致*/
# echo 'hello world' > /dev/globalmem
/bin/sh: can't create /dev/globalmem: No such device or address
解决办法:
# rm /dev/globalmem
# mknod /dev/globalmem c 226 0
# echo 'hello world' > /dev/globalmem
written 12 bytes(s) from 0
2.加载和创建设备节点都是成功的.但就是用cat命令查看时,虽然读出了正确的字符,却总是在最后还要加上一句提示"找不到设备或地址".不知为何会多出这句来.
# echo 'hello world!' > /dev/globalmem
written 13 bytes(s) from 0
# cat /dev/
/dev/console /dev/globalmem /dev/null
# cat /dev/globalmem
read 4096 bytes(s) from 0
hello world!
cat: read error: No such device or address
#
ANSWER:其实没问题,
<1>你把globalmem_read函数中的if (p >= GLOBALMEM_SIZE)改为if (p > GLOBALMEM_SIZE)就好了。具体原因是一次调用cat会读两次,每次读取4096个字节,此时文件读指针ppos就是4096了,在第二次读的时候,到if (p >= GLOBALMEM_SIZE)这里条件为真,globalmem_read就返回ENXIO错误了,所以才会出现No such device or address"错误。不知道在宋老师的机子上为什么就是正确的?
<2> 宋宝华 :返回错误值才是正确的,因为读的位置已经越界,所以要返回错误。该返回错误的时候返回正确,那就是错误。改成if (p > GLOBALMEM_SIZE)是错误的。
<3> 根据上面两点可以小结书上是没有错误的。输出的错误信息是正常的debug信息,千不该万不该就是cat调用了read两次。
相关文档:
一.在Linux操作系统的内存中共有五块空间:代码段,数据段,BBS段,堆和栈
代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存种的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。
数据段:数据段用来存放可执行 ......
Q:
I
keep getting
errors due to library functions being undefined,
but I'm #including all
the right header files.
A:
In the general case of calling code in an
external library,
using #include
to pull in
the right header file(s) is only half
of the story; you also have to tell th ......
export http_proxy=http://username:password@server:80
这个只能在当前窗口下使用,关闭窗口命令自动失效。
Wget下载是用proxy:
在当前用户目录下建立一个.wgetrc文件,内容:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
分别表示http的代理服务器和ftp的代理服务器。如果代理服 ......
from: http://www.21andy.com/blog/20060820/389.html
linux解压 tar命令
tar命令
tar [-cxtzjvfpPN] 文件与目录 ....
参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不 ......
内核与应用程序分开构建
内核与应用程序被设计成分开构建的,由C头文件和C库实现(KEMIN:我们一般都是基于库编译构建应用程序,这是默认的。但是如果没有与实时系统的统一构建方式对比,认识面很单一,难以较全面认识构建软件的本质)。分开构建的优点是易于独立开发新应用,满足动态需求;缺点或代价是对内核与应用的接口 ......