我做的其他很多工作就比较有针对性了,不是什么大众性的问题,比如加统计代码、实现自己的速率调整算法或者加一些自己的控制什么的,就不再单独介绍了,最后呢再罗列一些小问题,供参考。

1. 加载模块(执行wifi命令)失败

2. 系统崩溃的几个常见原因

3. 用十六进制输出字符前面出现一串ffff

4. printk调试是网络发包速度变慢

5. 驱动代码在打开文件指定0600这样的模式

6. 加载模块时can't insert 'xxx.ko'

1. 加载模块(执行wifi命令)失败

执行wifi命令时报下面的错误:

  1. root@OpenWrt:~# wifi
  2. PHY for wifi device radio0 not found
  3. PHY for wifi device radio0 not found

这是更换网卡后,需要重新检测生成/etc/config/wireless文件,可以先把这个文件拷出去(加载好模块),然后删掉,执行

  1. wifi detect > /etc/config/wireless

指令,然后在编辑这个文件(参考之前的文件)改到需要的配置。下面给出一个参考用的配置:

  1. config wifi-device radio0
  2. option type mac80211
  3. option channel
  4. option macaddr ::6d::ef:9a
  5. option hwmode 11na
  6. option htmode HT40+
  7. list ht_capab SHORT-GI-
  8. list ht_capab TX-STBC
  9. list ht_capab RX-STBC1
  10. list ht_capab DSSS_CCK-
  11. # REMOVE THIS LINE TO ENABLE WIFI:
  12. #option disabled
  13.  
  14. config wifi-iface
  15. option device radio0
  16. option network eth1
  17. option mode adhoc
  18. option ssid testna
  19. option bssid :::::
  20. option encryption none

2. 系统崩溃的几个常见原因

1) Kmalloc的参数为0,在内核开发中,指定分配长度为0的空间会导致系统崩溃;

2) 使用sprintf可能会超出已分配的内存块而进入其它内存区域,会引起系统崩溃;

3) 指针指向不可访问的区域时报错:比如下面的语句:

  1. char *a = "abcd";

这个语句可以正常执行,因为这个语句首先是在声明变量a,并分配空间,进而存放值“abcd”。但是下面的语句:

  1. char *a;
  2. 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'

编译没有报错,但是传到板子上加载模块却报:

  1. insmod: can't insert 'ath9k.ko': unknown symbol in module, or unknown parameter

仔细看编译时的输出,有这么几个警告:

  1. WARNING: "__truncdfsf2" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!
  2. WARNING: "__muldf3" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!
  3. WARNING: "__divdf3" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!
  4. WARNING: "__extendsfdf2" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!
  5. WARNING: "__floatsidf" [/home/x/openwrt/backfire/build_dir/linux-ar71xx/compat-wireless---/drivers/net/wireless/ath/ath9k/ath9k.ko] undefined!

经查阅资料,是因为内核不能很好的支持float,内核里尽量不要使用浮点数,可以的时候放大为整数进行操作。

【Atheros】内核调试及网卡加载等问题小结的更多相关文章

  1. ASP.NET MVC3 Razor 调试与预加载

    目录(?)[-] 获取服务器信息 FormsAuthenticationSlidingExpiration 属性 MVC3预加载   在ASP.NET MVC3开发中,调试中怎么也是不可缺少的,那对于 ...

  2. Linux内核源码树建立加载hello模块

    在加载模块之前,书中说要先建立内核源码树,那么,如何建立内核源码树呢? 首先,要先知道你的OS的内核版本,用uname -r可以查得到 在/url/src/目录下可以看到对应的版本目录 如果没有可以用 ...

  3. u-boot移植总结(二)LED点灯调试 和 u-boot加载地址

    (一)LED点灯调试 FL2440电路总共有4个LED0,LED1,LED2,LED3,分别接到板子GPB5,GPB6,GPB8,GPB10引脚.通过设置三个寄存器GPBCON(0x56000010) ...

  4. Windows下pycharm远程连接服务器调试-tensorflow无法加载问题

    最近打算在win系统下使用pycharm开发程序,并远程连接服务器调试程序,其中在import tensorflow时报错如图所示(在远程服务器中执行程序正常): 直观错误为: ImportError ...

  5. FrameWork内核解析之布局加载与资源系统(三)

    阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680本篇文章将继续从以下两个内容来介绍布局加载与资源系统: [ LayoutM ...

  6. 解决ThinkPHP中开启调试模式无法加载模块的问题。

    刚开始学习ThinkPHP就遇到这种问题,还是自己粗心. 错误如下: 原因:开启调试模式,区分大小写的,要把模块名首字母大写就OK了.也就是: [plain] view plain copy http ...

  7. 嵌入式linux加载引导内核和根文件系统的方法

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...

  8. [driver]linux内核动态加载模块

    问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...

  9. linux内核启动以及文件系统的加载过程

    Linux 内核启动及文件系统加载过程 当u-boot 开始执行 bootcmd 命令,就进入 Linux 内核启动阶段.普通 Linux 内核的启动过程也可以分为两个阶段.本文以项目中使用的 lin ...

随机推荐

  1. PHP生成GUID的函数

    GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算法产生 ...

  2. 导出/导入Eclipse的workspace配置(备份Eclipse配置)

    设置好workspace配置后可以将配置保存为 *.epf 文件. 进入 File -> Export : 选择 General -> Preferences ,下一步: 选择 Expor ...

  3. 使用React开发

    阅读目录 React的组件生命周期 JSX 语法 父组件传向子组件 子组件传向父(爷)组件 getDefaultProps && getInitialState 获取真实的DOM节点 ...

  4. mysql-cluster集群(亲测)

    重要说明:mysql-cluste与非集群时用的mysql-server与mysql-client没有任何关系,mysql-cluste安装包中已自带了集群用的server与client,启动mysq ...

  5. Visual Studio Debug和Release的区别及obj的作用

    一.Debug和Release的区别      1.Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂), ...

  6. zoj 3430 Detect the Virus(AC自己主动机)

    题目连接:zoj 3430 Detect the Virus 题目大意:给定一个编码完的串,将每个字符相应着表的数值转换成6位二进制.然后以8为一个数值,又一次形成字符 串,推断给定询问串是否含有字符 ...

  7. session的作用范围(转)

    session是在服务器端建立的,浏览器访问服务器会有一个jsessionid,浏览器端通过 jsessionid定位服务器端的session,session的创建和销毁由服务器端控制.当浏览器关闭后 ...

  8. CSDN日报20170413 ——《天天写业务代码的那些年,我们是怎样成长过来的》

    [程序人生]天天写业务代码的那些年,我们是怎样成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboo ...

  9. jconsole使用记录

    jconsole/JVisualVM连接linux服务器查看JVM使用情况 现需要在本地电脑上查看服务器的tomcat的整体的运行状态,使用jconsole工具. JMX配置 拷贝$JAVA_HOME ...

  10. java执行linux shell命令,并拿到返回值

    package com.pasier.xxx.util; import java.io.IOException; import java.io.InputStream; import java.nio ...