i96在上一篇文章中写道了一些坑和问题
Orange Pi i96 入手填坑问题总结_hoopertsau的博客-CSDN博客
今天在说两个个问题
一、MAC地址每次启动都会变化的问题
主要是要重新编译一下内核中的相关驱动
1、修改OrangePiRDA/kernel/drivers/net/wireless/rdaw80211/rdawlan/wland_defs.h 第194行
将USE_MAC_FROM_RDA_NVRAM注释掉
2、然后在文件系统中增加一个文件,路径 /data/misc/wifi/WLANMAC
这里就是MAC地址的取值,主要读取前6个字节,注意这不应该是一个文本文件,应该是一个二进制文件,6个字节刚好就是对应MAC地址
3、重新编译内核和驱动
形成新的模块 drivers/net/wireless/rdaw80211/rdawlan/rdawfmac.ko
4、更新到SD卡上。重启,你就发现MAC地址就是这个文件中设置的地址了
二、串口命令行粘贴较多数据后死机的问题
这是一个很烦人的问题,主要是使用串口命令行的时候,如果一下子粘贴太多数据,直接就卡死了。原因是这个芯片的uart缓冲区溢出了,但是代码中没有将相关的标志位清空,导致系统直接卡死,不能再接收UART数据。
解决这个问题也很简单,再uart相关代码中增加一行即可。
在内核源代码中的 drivers/tty/serial/rda_uart.c 第886行,增加一句话
hwp_uart->status = 0;
主要在这个函数中
static irqreturn_t rda_interrupt(int irq, void *dev_id)
{
.....
....
/*
if received rx break interrupt should close all rx interrupt
*/
if(irqstatus & UART_RX_LINE_ERR){
rda_handle_rxerr(port);
}
rda_handle_receive(port, irqstatus);
rda_handle_uart_transmit(port, irqstatus);
// Poke status register to reset error conditions
hwp_uart->status = 0;
return IRQ_HANDLED;
}
这样即使溢出也能清空标志,还可以继续接收数据
重新编译后,更新内核和驱动即可