碰巧解决

来源:互联网 发布:dsdt提取 mac 编辑:程序博客网 时间:2024/06/06 13:19

安装 驱动的时候根据网上的资料 正常编译后,insmdo 驱动,但是爆出如下的错误。

rt3070sta: Unknown symbol mcount
rt3070sta: Unknown symbol kmem_cache_alloc_notrace
rt3070sta: Unknown symbol __tracepoint_kmalloc
rt3070sta: Unknown symbol slab_buffer_size
insmod: can't insert 'rt3070sta.ko': unknown symbol in module or invalid paramet
er

改换驱动 rt5370sta;

rt3070sta: Unknown symbol mcount


这里面不知的是什么问题,是原先的驱动不对?

几番折腾和百度google没有理想的答案,最后就 重新尝试最无奈的做法。 重新编译驱动(时日已经很久了,我不知道是不是统一个驱动)。

不过,也就是因为这个做法,竟然没有上述加载的问题了。


另外还有一个,应用打开ov9650摄像头是 显示 ERROR opening V4L interface, 并且mjpeg-stream 停止,整个系统呈死机状态。 约60s后弹出oops 信息。

原先自己使用的虽然和开发板提供的电源同电压,但是电流稍落。  后更换至 开发板原配电压,似乎问题出现的频率就变小了。但是问题的根本原因在哪里,也还是不晓得。

在qq上聊天时的记录,可能排版会丑陋些



 11:13:08
mjpg_streamer: page allocation failure. order:10, mode:0xd1                     
[<c00457c0>] (unwind_backtrace+0x0/0xd4) from [<c008e270>] (__alloc_pages_intern
al+0x36c/0x384)                                                                 
[<c008e270>] (__alloc_pages_internal+0x36c/0x384) from [<c008e2a4>] (__get_free_
pages+0x1c/0x54)                                                                
[<c008e2a4>] (__get_free_pages+0x1c/0x54) from [<bf001540>] (camif_open+0x11c/0x
28c [camera])                                                                   
[<bf001540>] (camif_open+0x11c/0x28c [camera]) from [<c01fdf8c>] (misc_open+0x17
0/0x208)                                                                        
[<c01fdf8c>] (misc_open+0x170/0x208) from [<c00af92c>] (chrdev_open+0x120/0x178)
[<c00af92c>] (chrdev_open+0x120/0x178) from [<c00ab388>] (__dentry_open+0x14c/0x
260)                                                                            
[<c00ab388>] (__dentry_open+0x14c/0x260) from [<c00ac38c>] (nameidata_to_filp+0x
44/0x5c)                                                                        
[<c00ac38c>] (nameidata_to_filp+0x44/0x5c) from [<c00b77c0>] (do_filp_open+0x3a8
/0x730)                                                                         
[<c00b77c0>] (do_filp_open+0x3a8/0x730) from [<c00ab184>] (do_sys_open+0x5c/0xe8
)                                                                               
[<c00ab184>] (do_sys_open+0x5c/0xe8) from [<c003fd60>] (ret_fast_syscall+0x0/0x2
c)                                                                              
Mem-info:                                                                       
Normal per-cpu:                                                                 
CPU    0: hi:   18, btch:   3 usd:   0                                          
Active_anon:64 active_file:5 inactive_anon:99                                   
 inactive_file:2513 unevictable:1 dirty:0 writeback:0 unstable:0                
 free:6711 slab:1464 mapped:105 pagetables:17 bounce:0                          
Normal free:26844kB min:1016kB low:1268kB high:1524kB active_anon:256kB inactive
_anon:396kB active_file:20kB inactive_file:10052kB unevictable:4kB present:65024
kB pages_scanned:0 all_unreclaimable? no                                        
lowmem_reserve[]: 0 0                                                           
Normal: 77*4kB 35*8kB 41*16kB 102*32kB 95*64kB 19*128kB 8*256kB 5*512kB 3*1024kB
 3*2048kB 0*4096kB = 26844kB                                                    
2519 total pagecache pages                                                      
0 pages in swap cache                                                           
Swap cache stats: add 0, delete 0, find 0/0                                     
Free swap  = 0kB                                                                
Total swap = 0kB                                                                
16384 pages of RAM                                                              
9830 free pages                                                                 
1817 reserved pages                                                             
1464 slab pages                                                                 
108 pages shared                                                                
0 pages swap cached                                                             
ERROR opening V4L interface
谁能帮忙分析一下?
谁能帮忙分析一下?
  11:14:11
不知道什么原因导致内存页分配失败。   mjpeg-stream 也有成功打开的时候,这个问题 好像是不定期出现的。
  11:14:30

  11:14:55
order:10 ?这么大?
2^10个页?
  11:16:16
估计伙伴系统提供不了这个阶的内存
  11:16:38
一个页 有多大?
总共64M的内存
  11:16:42
1024个连续的页内存
  11:16:56
2048 byte 吗?
一个页
  11:17:15
一个页是4K
关键在于1024个页在物理上要连续
连续就不好办了
  11:18:11
也就是申请了4M的内存空间,是把?
有什么方法可以折衷一下?
  11:19:27
大小不重要,重要的是它要连续的内存
 11:20:34
你写的是内核模块吗?必须要求物理上连续吗?如果不是用vmalloc试试
 11:21:04
可是内存页分配失败了,然后就导致了 oops信息,导致整个 系统不行了。
主要这个应用不是我写的。
mjpeg-stream  网络视频传输
是一个开源的项目
  11:21:54
开源就是让你改的啊?源代码都给你了,有问题,为什么不改?
  11:22:55
恩恩,那我就试着去改。
  11:23:59
估计这个错是用kmalloc导致的
  11:28:59
恩,我先看下源码
  11:29:45
oops已经告诉你在哪出错了,别有恐惧心理,代码都是人写的。
改错了再恢复回去就行了
  11:30:52
不想改源码的主要原因还真是有恐惧心理,呵呵
不过这个应用,第一次不成功的时候,我又重新运行,也有成功的时候
  13:36:15
看你贴的信息实在分配连续4M内存的时候失败了, 而且内存0*4096kB,说明系统确实已经没有内存了,
但为什么没有高端内存的信息?你用的是ARM吗?内核版本那是多少?
  13:39:07
是arm  内核版本2.6.30.4
arm9
  13:40:55
一共才64M物理内存?
  13:41:18
都记得 内核编译的时候 有kernel hack 的一些 debug选项,但是选项多。
对的,一个64M内存
一共
  13:41:37
错误就是内存不够用
  13:42:08
大多数 厂家提供的 开发板 好像都是64M 的sdram
  13:42:28
刚才得错误信息说明你系统的内存压力已经达到了极限了,简单说就是内存不够,增加物理内存就行了
这个错误没别的解决办法,物理内存太少
  13:43:30
还一个办法就是增加交换分区,但是你的物理内存实在太少,我不知道交换分区行不行啊,你可以试试看
  13:45:51
用 top 查看的时候, 内存的使用 %MEM那一栏  加起来 接近20% 左右。
  13:46:08
贴出来看看
  13:47:29
==

  13:48:42
wpa_supplicant 是无线 wifi 使用的
crond 是 定时ping 网关看连接是否成功
irq_test  是按键恢复一些默认配置
  13:49:40
怎么没有RES那一列?RES显示的是物理内存
%MEM是物理内存吗?
  13:50:15
我直接用 top 命令。  top 要带其他什么参数吗?
我只看了字面意思,就以为是物理内存了。
  13:50:41
默认应该有RES
  13:52:23
看文档%MEM好像也是物理内存
  13:52:28
我看下有没有其他办法显示出来
  13:53:35
你用的是busybox?
  13:53:42
对的
  13:53:52
怎么用啊。。。
唉~一直没搞懂。
  13:54:07
arm 上用的 不都是busybox 么?
制作文件系统的时候 添加的。
  13:55:42
top -m试试
  13:56:30

  13:57:19
我觉得根源还是你的物理内存太小啊, 如果物理内存暂时不能增加, 只能加一个交换分区了。
wpa_supplicant是860K, bash是1.2M
  13:58:36
你自己算算总共多少内存了?你贴的不全啊
 13:58:39
30048 free, 只是不连续
  13:59:01
有没有 整理内存的命令呢?
让他们 不连续变成连续的
  13:59:16
free多没用啊,全是小快内存, 他现在是在分配连续4M的时候失败了
4M内存已经没有了
不可能
  13:59:40
我是这个意思的
  13:59:40
没有这样的命令

  14:00:15
加内存,或者换成vmalloc
  14:00:42
好吧,我去看下 交换分区 相关的信息.  物理上加内存的可能性 不大.
  14:01:09
改一下伙伴算法,把4M的那个区的数量增加一些,
  14:01:17
swap为0, 没弄交换分区?
  14:02:18
恩,从来没配置过。 都是厂家出厂的最原始配置。
  14:02:24
看着是
 14:02:31
何况 整个flash 大小 也只是256M
  14:03:21
cat /proc /   buddyinfo  输出什么?
  14:03:59

  14:04:05
弄上交换分区,可以换出一部分内存,不过,存在有4M连续内存的概率不大,因为整个内存太小了
  14:04:29
不全啊,我要看最后的1列
  14:04:56

显示的就这么多
是不是 busybox 功能 就被 裁剪过 ?
  14:05:45
一共才3个4M的快, 你最多只能成功3次啊,3次之后还是失败啊
换行了吧
你的屏幕窄,换行了,
  14:06:51

恩,换行了。
  14:07:04
所以把,你就不能跑mjpeg_streamer这个程序, 这个程序太占内存
  14:08:12
这个...不是我能决定的。
好吧,申请换128M的内存
  14:08:53
恩,这才是正道啊,其他都是歪门邪道
  14:09:06
但是担心 是不是 4M连续的还是 一样 不多....
 14:09:49
这个得看内核伙伴系统那块代码怎么写的,应该不会这么傻吧,
我看过但是现在不记得了哈
  14:10:22
先分小的,再分大的
小的分的多了,大的也不可能保留得住了
  14:11:13
等会啊,
  14:11:13
释放时,也是尽量向大的汇合
  14:12:49
那现在有4个途径,1个是修改mjpeg-stream(减小申请的空间),或者修改伙伴算法(内核),或者是增加交换空间,或者就是申请购买物理内存。
  14:13:01
有新发现, 我看崩溃时候的调用堆栈, 好像跑到摄像头驱动哪里去了吧?  你驱动写的有问题啊,分配的内存太大了,把这块内存变小点,也许可以解决你的问题。
稍微改改驱动,马上就可以试啊
改mjpeg-stream没用,他是用户空间程序,
  14:14:03
恩,是有个open v4l interface error失败的 提示
  14:14:50
这个驱动写的太暴力了啊, 1次就分配4M内存,
把4M变小点,
 14:15:16
哦,那这么说4M 内存空间 都是 摄像头驱动 导致的了?
这个驱动也是 厂家给的,摄像头本身为130万像素
 14:15:48
代码在camif_open, 它调用了__get_free_pages
130像素需要多少内存?
怎么算?
 14:16:48
你可以把这个问题反映给厂家,看他们怎么说
我帮你改改哈:那现在有4个途径,1个是修改摄像头驱动(减小申请的空间),或者修改伙伴算法(内核),或者是增加交换空间,或者就是申请购买物理内存。
  14:18:12
哈哈,好的,谢谢了。
 14:18:35
等等
  14:18:56
至于130万像素占用空间怎么算,这个 确实不是很明白。
还有?
  14:19:09
增加交换分区没用了, 你的失败在内核那里,交换分区只能解决用户空间的问题
那现在有4个途径,1个是修改摄像头驱动(减小申请的空间),或者修改伙伴算法(内核),或者就是申请购买物理内存。
只有这三条能起作用
  14:19:45
还有一个不是很清楚的地方是,内核空间和用户空间 所使用的内存 能有多少?
  14:19:45
那现在有3个途径,1个是修改摄像头驱动(减小申请的空间),或者修改伙伴算法(内核),或者就是申请购买物理内存。
  14:19:49
规定了比例吗?
开发板上是2片32M 内存拼起来的64M 内存。
  14:21:04
看内存区怎么分的,arm的我不记得的了, 你看arm的代码里面zone_normal, zone_highmen怎么分的?这两个对应内核空间和用户空间能用的内存

  14:22:17
zone_normal, zone_highmen里面的内存就是通过所谓的伙伴系统管理的。
刚才的失败就是zone_normal里面4M的内存块没有了
  14:22:57
伙伴系统?  我只隐约记得 有mm 还是 mmu
没深入 看过。
  14:23:30
或者修改伙伴算法(内核) 这个选项可以否掉了
  14:23:33
mmu是硬件级的概念,对于软件出了页表基本可以忽略这个概念
 14:25:11
为啥修改伙伴算法 选项可以否定掉?  没理解
  14:25:10
修改伙伴系统 还是可以的,刚才失败的时候还剩下26M内存, 改改伙伴系统里的4M块让它多一点还是可以的,
 14:25:41
那你说下,你想怎么改?
 14:25:55
让4M的快多一点啊
内核初始化的时候肯定就算好了4M块的初始数量,改改让他多一点肯定可以的,
  14:26:39
每分一块内存就保留4M?很快内存就没了
  14:28:28
而且多一点也不影响现有内核的伙伴算法, 因为伙伴算法一开始就是兼容这种该法的,具体说就是4M的块多了,其他的块就少了,但这没关系,其他的小块可以从这4M的大块里分出小块来
  14:30:36
哦,好吧,你试试吧
  14:32:35
哦,我会先修改摄像头驱动的。  先捏软柿子..
  14:32:49
不用试啊,算法一开始就是这样写的。
 14:33:49
也许4M是通过像素算出来的,不一定能改,不过你看一试试看。
 14:36:15
1024*1280*3
1024*1280 约等于130万
  14:36:33
那估计不好改了
一个像素3个字节?
  14:36:49
3 就是 rbg 3个字节
  14:36:59
不好改啊,
  14:37:13
用不了130万像素
他们给的驱动最后 给出的图像时 320*240 de
  14:37:49
恩,改分辨率小点的。





原创粉丝点击