在widora neo开发板上,用官方固件验证 双路 音频,oops

这个问题很早就发现过,也在论坛上发过,希望版主关注下!

我买的是widora neo的板子
固件用的是:openwrt-ramips-mt7688-widora16128-0.1.8-20180725.bin

烧好固件什么都不做, 就开始跑脚本,脚本和测试文件跑在SD卡上。
测试结果:
1、如果只跑一个aplay是不会出问题的,跑两个就很容易复现;
2、如果把mt_wifi.ko rmmod掉,跑两个aplay也不会出问题。

脚本:
#!/bin/sh

count=1

killall aplay

while [ 1 ]
do

count=expr $count + 1

aplay -Dplug:dmix -f S16_LE -t raw green1.mp3 &
sleep 1
aplay -Dplug:dmix -f S16_LE -t raw green.mp3 &

sleep 10
echo $count

killall aplay
sleep 1

done

系统oops信息。
[ 358.400000] Unhandled kernel unaligned access[#1]:
[ 358.400000] CPU: 0 PID: 0 Comm: swapper Not tainted 3.18.29 #4
[ 358.400000] task: 80306ad0 ti: 80300000 task.ti: 80300000
[ 358.400000] $ 0 : 00000000 00000001 86090f40 00200000
[ 358.400000] $ 4 : 25172517 00000001 00000000 00000000
[ 358.400000] $ 8 : 00000001 00430c00 a4030000 a4270000
[ 358.400000] $12 : 43420000 00000019 00000000 3262005e
[ 358.400000] $16 : 86090f40 00000001 869c9a80 00000000
[ 358.400000] $20 : 869c9a80 00000101 10020180 868c0000
[ 358.400000] $24 : 00000003 80040e78
[ 358.400000] $28 : 80300000 80301c40 868c0000 801d39b0
[ 358.400000] Hi : 00000053
[ 358.400000] Lo : 724e0000
[ 358.400000] epc : 8007595c put_page+0x0/0x4c
[ 358.400000] Not tainted
[ 358.400000] ra : 801d39b0 skb_release_data+0x9c/0xfc
[ 358.400000] Status: 1100e403 KERNEL EXL IE
[ 358.400000] Cause : 00800010
[ 358.400000] BadVA : 25172517
[ 358.400000] PrId : 00019655 (MIPS 24KEc)
[ 358.400000] Modules linked in: pppoe ppp_async iptable_nat pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_CT uvcvideo slhc nf_reject_ipv4 nf_nat_masquerade_ipv4 nf_nat_ftp nf_nat nf_log_ipv4 nf_defrag_ipv6 nf_defrag_ipv4 nf_conntrack_rtcache nf_conntrack_ftp nf_conntrack iptable_raw iptable_mangle iptable_filter ip_tables crc_ccitt snd_soc_mt76xx_machine snd_soc_mt76xx_pcm snd_soc_mt76xx_i2s snd_soc_mt76xx_i2s_ctl i2c_wm8960 snd_soc_wm8960 ralink_gdma videobuf2_vmalloc videobuf2_memops videobuf2_core v4l2_common videodev i2c_mt7621 snd_soc_core mt_wifi i2c_dev ip6t_REJECT nf_reject_ipv6 nf_log_ipv6 nf_log_common ip6table_raw ip6table_mangle ip6table_filter ip6_tables x_tables snd_compress snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_rawmidi snd_seq_device snd_hwdep snd input_core soundcore vfat fat autofs4 nls_utf8 nls_iso8859_1 nls_cp437 regmap_spi regmap_i2c i2c_core regmap_core lzo_decompress lzo_compress ipv6 dma_shared_buffer mmc_block usb_storage sdhci_pltfm sdhci mtk_sd mmc_core leds_gpio ohci_platform ohci_hcd ehci_platform ehci_hcd sd_mod scsi_mod gpio_button_hotplug ext4 jbd2 mbcache exfat drv_regopt usbcore nls_base usb_common crc16 crypto_hash
[ 358.400000] Process swapper (pid: 0, threadinfo=80300000, task=80306ad0, tls=00000000)
[ 358.400000] Stack : 869c9a80 801d3a24 8609008a c04c384c 869c9a80 86090080 c04c2000 801d3a60
869c9a80 00000101 10020180 868c0000 80301cc8 86839e0c 063e2fc0 863e2fc0
00000000 0000000f 86090080 00000001 000000bf 86d87800 c04c2000 c0602000
869c9a80 86090080 80301cd4 8683af9c 87932bc8 80305570 80301d2c 80040ef0
00000000 8003d05c 06090040 c1630000 00000000 00000040 80301cd4 00000000

[ 358.400000] Call Trace:
[ 358.400000] [<8007595c>] put_page+0x0/0x4c
[ 358.400000] [<801d39b0>] skb_release_data+0x9c/0xfc
[ 358.400000] [<801d3a60>] __kfree_skb+0x14/0xd0
[ 358.400000] [<86839e0c>] dev_rx_mgmt_frm+0x1f4/0x214 [mt_wifi]
[ 358.400000] [<8683af9c>] rtmp_rx_done_handle+0x4c4/0x4f8 [mt_wifi]
[ 358.400000] [<86872da8>] mt_mac_int_4_tasklet+0xfcc/0x10ac [mt_wifi]
[ 358.400000]
[ 358.400000]
Code: 24a54e38 0801d60e 00003021 <8c820000> 3042c000 10400003 00801821 0801d4dd 00000000
[ 358.710000] —[ end trace f35b2c6183b85c5b ]—
[ 358.720000] Kernel panic - not syncing: Fatal exception in interrupt
[ 358.720000] Rebooting in 3 seconds…

@mangogeek 自己琢磨了几天,修改了madplay源码,实现了应用层的软MIX方式,先用着,这样的话系统是比较稳定了。

同时双路音频dmix目前的确还不稳定,还没找到好的解决办法