【Atheros】内核调试及网卡加载等问题小结
我做的其他很多工作就比较有针对性了,不是什么大众性的问题,比如加统计代码、实现自己的速率调整算法或者加一些自己的控制什么的,就不再单独介绍了,最后呢再罗列一些小问题,供参考。
1. 加载模块(执行wifi命令)失败
执行wifi命令时报下面的错误:
root@OpenWrt:~# wifi
PHY for wifi device radio0 not found
PHY for wifi device radio0 not found
这是更换网卡后,需要重新检测生成/etc/config/wireless文件,可以先把这个文件拷出去(加载好模块),然后删掉,执行
wifi detect > /etc/config/wireless
指令,然后在编辑这个文件(参考之前的文件)改到需要的配置。下面给出一个参考用的配置:
config wifi-device radio0
option type mac80211
option channel
option macaddr ::6d::ef:9a
option hwmode 11na
option htmode HT40+
list ht_capab SHORT-GI-
list ht_capab TX-STBC
list ht_capab RX-STBC1
list ht_capab DSSS_CCK-
# REMOVE THIS LINE TO ENABLE WIFI:
#option disabled config wifi-iface
option device radio0
option network eth1
option mode adhoc
option ssid testna
option bssid :::::
option encryption none
2. 系统崩溃的几个常见原因
1) Kmalloc的参数为0,在内核开发中,指定分配长度为0的空间会导致系统崩溃;
2) 使用sprintf可能会超出已分配的内存块而进入其它内存区域,会引起系统崩溃;
3) 指针指向不可访问的区域时报错:比如下面的语句:
char *a = "abcd";
这个语句可以正常执行,因为这个语句首先是在声明变量a,并分配空间,进而存放值“abcd”。但是下面的语句:
char *a;
a = "abcd";
这个语句就有可能引发系统崩溃了,因为首先声明变量a,却未申请空间(既没有像第一种情况那样指明要存什么值,也没有用kmalloc申请空间),这时候指针指向什么位置是不可控的,然后第二条语句进行赋值,此时,要赋的值“abcd”是不在内存里的,所以a此时指向的不可控位置如果正好是合法位置,那么平安无事,如果是内存中不可访问的空间,就会导致崩溃。
3. 用十六进制输出字符前面出现一串ffff
以十六进制逐个输出单字符,怎么会出现很长的序列如:ffffff88 0 0 0 0 15 6d ffffff84 ffffffb7 ffffff80 0 15 6d ffffff84 ffffffee ffffff9f 0 0 0 0 0 1 50 39 20 0 50 ffffffaa ffffffaa ffffffaa?
因为如果字符定义为有符号的char,那么对于88这样的十六进制数,会被认为是负值,对于32位编译器,前面就会补上6个f。
4. printk调试是网络发包速度变慢
printk非常影响效率,少用printk就好了~
5. 驱动代码在打开文件指定0600这样的模式
0600是用的八进制表示,换算成二进制是0001 1000 0000,而查阅资料,得到文件读写的权限位如下:
|
S_IRWXU |
00700 |
mask for file owner permissions |
|
S_IRUSR |
00400 |
owner has read permission |
|
S_IWUSR |
00200 |
owner has write permission |
|
S_IXUSR |
00100 |
owner has execute permission |
|
S_IRWXG |
00070 |
mask for group permissions |
|
S_IRGRP |
00040 |
group has read permission |
|
S_IWGRP |
00020 |
group has write permission |
|
S_IXGRP |
00010 |
group has execute permission |
|
S_IRWXO |
00007 |
mask for permissions for others (not in group) |
|
S_IROTH |
00004 |
others have read permission |
|
S_IWOTH |
00002 |
others have write permission |
|
S_IXOTH |
00001 |
others have execute permission |
所以0600就相当于S_IRUSR | S_IWUSR,真是好奇怪,驱动为啥不用宏要直接用十六进制数字呢。
6. 加载模块时can't insert 'xxx.ko'
编译没有报错,但是传到板子上加载模块却报:
insmod: can't insert 'ath9k.ko': unknown symbol in module, or unknown parameter
仔细看编译时的输出,有这么几个警告:
WARNING: "__truncdfsf2" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!
WARNING: "__muldf3" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!
WARNING: "__divdf3" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!
WARNING: "__extendsfdf2" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!
WARNING: "__floatsidf" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!
经查阅资料,是因为内核不能很好的支持float,内核里尽量不要使用浮点数,可以的时候放大为整数进行操作。
【Atheros】内核调试及网卡加载等问题小结的更多相关文章
- ASP.NET MVC3 Razor 调试与预加载
目录(?)[-] 获取服务器信息 FormsAuthenticationSlidingExpiration 属性 MVC3预加载 在ASP.NET MVC3开发中,调试中怎么也是不可缺少的,那对于 ...
- Linux内核源码树建立加载hello模块
在加载模块之前,书中说要先建立内核源码树,那么,如何建立内核源码树呢? 首先,要先知道你的OS的内核版本,用uname -r可以查得到 在/url/src/目录下可以看到对应的版本目录 如果没有可以用 ...
- u-boot移植总结(二)LED点灯调试 和 u-boot加载地址
(一)LED点灯调试 FL2440电路总共有4个LED0,LED1,LED2,LED3,分别接到板子GPB5,GPB6,GPB8,GPB10引脚.通过设置三个寄存器GPBCON(0x56000010) ...
- Windows下pycharm远程连接服务器调试-tensorflow无法加载问题
最近打算在win系统下使用pycharm开发程序,并远程连接服务器调试程序,其中在import tensorflow时报错如图所示(在远程服务器中执行程序正常): 直观错误为: ImportError ...
- FrameWork内核解析之布局加载与资源系统(三)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680本篇文章将继续从以下两个内容来介绍布局加载与资源系统: [ LayoutM ...
- 解决ThinkPHP中开启调试模式无法加载模块的问题。
刚开始学习ThinkPHP就遇到这种问题,还是自己粗心. 错误如下: 原因:开启调试模式,区分大小写的,要把模块名首字母大写就OK了.也就是: [plain] view plain copy http ...
- 嵌入式linux加载引导内核和根文件系统的方法
总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...
- [driver]linux内核动态加载模块
问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...
- linux内核启动以及文件系统的加载过程
Linux 内核启动及文件系统加载过程 当u-boot 开始执行 bootcmd 命令,就进入 Linux 内核启动阶段.普通 Linux 内核的启动过程也可以分为两个阶段.本文以项目中使用的 lin ...
随机推荐
- PHP 让__get方法重新执行
<?php class A { public function __get($p) { echo "getting $p\r\n"; if(isset($this->$ ...
- ESB 12种跑法
ESB 12种跑法 请求响应: MQ-MQ MQ-Webservice Webservice-MQ Webservice-Webservi ...
- tar命令解压缩出错
[root@zhoucentos share1]# tar zxvf otp_src_19..tar.gz gzip: stdin: not in gzip format tar: Child ret ...
- Win7如何配置java环境变量,运行环境
直接运行eclipse,弹出错误提示. 1 确保你安装了JDK,安装之后文件夹示例如下(jdk1.x.x取决于你安装的JDK版本) 2 系统,高级系统设置,高级,环境变量新建一个JAVA_HO ...
- Windows局域网如何进行远程桌面连接
我们以虚拟机为例: 1 确保被控制的计算机允许远程连接 2 确保被控制的计算机有密码(一般人方便,只有一个administrator账号,而且不设密码,开机直接进入的,如果没有密码,将无法进行远程 ...
- Visual Studio 外请版本号管理插件 - AnkhSVN
Visual Studio 外请版本号管理插件 - AnkhSVN 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致 ...
- mysql误操作后通过binlog恢复,同时解决tmp目录满的问题
注意: 本文的恢复,并不是基于恢复某个时间点的全量备份后的增量恢复,而是指在现有数据库基础上基于binlog的恢复.适用于较小的数据误操作. 提取日志文件为sql语句: /usr-ext/local/ ...
- Linux非阻塞IO(二)网络编程中非阻塞IO与IO复用模型结合
上文描述了最简易的非阻塞IO,采用的是轮询的方式,这节我们使用IO复用模型. 阻塞IO 过去我们使用IO复用与阻塞IO结合的时候,IO复用模型起到的作用是并发监听多个fd. 以简单的回射服务器 ...
- 扩充STL-编写自己的迭代器
这里的迭代器能够与STL组件共同工作,是对STL的一种扩充. 自定义迭代器必须提供iterator_traits的五种特性,分别是迭代器类型.元素类型.距离类型.指针类型与reference类型. ...
- lodash 数组元素查找 findIndex
_.findIndex(array, [predicate=_.identity]) 这个方法类似 _.find.除了它返回最先通过 predicate 判断为真值的元素的 index ,而不是元素本 ...