碰巧解决
来源:互联网 发布: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
恩,改分辨率小点的。
- 碰巧解决
- 碰巧而已
- 碰巧的巧合
- 碰巧看到的一道试题
- 我只是碰巧路过这里打完酱油就走哦。。
- 无法找到msvcp90.dll的一个碰巧解决办法
- 京东的一道面试题,碰巧今天逛论坛也看见了~
- 解决
- 解决
- 解决
- 解决
- 解决
- 解决
- 解决
- 乱码 乱码 乱码 解决 解决 解决
- 解决bug
- 数据格式解决
- 圆满解决!
- UVA 701 - The Archeologists' Dilemma(数论)
- MFC ListBox控件使用方法总结
- Linux性能评测工具之一:gprof篇
- 如何减少代码中的分支语句
- node.js 连接mysql数据库 完美教程
- 碰巧解决
- 基于正则表达式的轻量提示插件--InputNotes文本框输入提示插件
- strust2 AOP学习笔记
- LeetCode Partition List 按值分段链表 系统分析
- 数据库安全警示录1之drop user and drop tablespace规范
- 双缓冲(Double Buffer)原理和使用
- JAVA中String、StringBuffer、StringBuilder的区别
- 轻便提示插件tipTip
- linux磁盘分区