闲鱼30包邮购得的摇头机,移动和家亲定制的科大讯飞XFP301-M,全新但是序列号被绑定,代工厂为中山科美视通科技有限公司,连个官网也没有。这里有前人的拆解贴,记录一下折腾和安装OpenIPC的过程
硬件配置
SoC: 君正T31ZX 单核1.5GHz
CMOS:台湾晶相光电 JXQ03P 300万像素
RAM:128MB SoC内置
ROM:16MB NOR
镜头:4mm M12 IR-CUT
其他配置:带红外补光灯,PTZ,WiFi+有线连接,TF卡卡槽,语音对讲
和之前折腾的360 AP6PCM03一样的配置,不过360带有线网口,这台只有WiFi,无线网卡为rtl8188fu,单频2.4GHz
备份原始固件
因为没有网口,在uboot下无法通过tftp备份固件,但是uboot下有mmc命令,且能正确识别到TF卡,所以可以将NOR闪存备份到TF卡内,TF卡block size为512 bytes
sf probe 0
sf read 0x80600000 0x0 0x1000000
mmc erase 0x5000 0x8000
mmc write 0x80600000 0x5000 0x8000
此命令将NOR 16MB内容完整写入到TF卡10MB偏移处。电脑上使用dd命令将之读出
dd if=/dev/mmcblk0 of=xfp301m_fulldump.bin skip=20480 count=32768
然后根据启动日志中的分区表将之分割为独立分区镜像
0x000000000000-0x000000040000 : "boot"
0x000000040000-0x000000200000 : "kernel"
0x000000200000-0x000000740000 : "root"
0x000000740000-0x000001000000 : "appfs"
获取root密码
启动完成后登录root用户有密码,bootargs
中设置init=/bin/sh
, cat /etc/shadow
root:$1$RVn0gu3y$fUIKeC8F7rWAzyPpoxhl2/:10933:0:99999:7:::
网上没有现成的密码,转换思路,既然不知道密码,那就把密码清空。unsquashfs解包rootfs分区,编辑/etc/shadow
,清空root用户密码,mksquashfs重新打包为rootfs_mod.bin,拷贝到FAT文件格式的TF卡内,插入到摄像头,进入uboot
fatls mmc 0 #列出TF卡内FAT文件系统内的文件
fatload mmc 0 0x80600000 rootfs_mod.bin
sf probe 0
sf erase 0x200000 0x540000
sf write 0x80600000 0x200000 0x540000
reset
进入无人之地
[@IFLY_IPC:]# cat /proc/cpuinfo
system type : Swan
machine : Unknown
processor : 0
cpu model : Ingenic Xburst V0.0 FPU V0.0
BogoMIPS : 1391.00
wait instruction : yes
microsecond timers : no
tlb_entries : 32
extra interrupt vector : yes
hardware watchpoint : yes, count: 1, address/irw mask: [0x0fff]
isa : mips32r1
ASEs implemented :
shadow register sets : 1
kscratch registers : 7
core : 0
VCED exceptions : not available
VCEI exceptions : not available
Hardware : isvp
Serial : 00000000 00000000 00000000 00000000
[@IFLY_IPC:xpf301m]# mount
rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro,relatime)
tmpfs on /dev type tmpfs (rw,relatime)
proc on /proc type proc (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /tmp type tmpfs (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
sysfs on /sys type sysfs (rw,relatime)
/dev/mtdblock3 on /mnt/mtd type jffs2 (rw,relatime)
尝试修改SN解绑
略,无解
安装OpenIPC
SD卡安装
OpenIPC对君正T31和JXQ03这颗CMOS有完整支持。下载对应固件:openipc-t31zx-ultimate-16mb.bin
,放入FAT文件系统的TF卡内,插入摄像头,进入uboot
fatload mmc 0 0x80600000 openipc-t31zx-ultimate-16mb.bin
sf probe 0
sf erase 0x0 0x1000000
sf write 0x80600000 0x0 0x1000000
reset
set bootargs 'mem=${osmem} rmem=${rmem} console=ttyS1,115200n8 panic=20 root=/dev/mtdblock3 rootfstype=squashfs init=/init mtdparts=jz_sfc:256k(boot),64k(env),3072k(kernel),10240k(rootfs),-(rootfs_data)'
save
reset
编译RTL8188FU无线网卡驱动
顺利进入OpenIPC,主程序majestic正常运行,cmos驱动应该没问题,但是无线网卡没有上线。原来T31的OpenIPC固件包内并没有包含rtl8188fu的驱动,但是github的源码内是有对应的package的,可以自己编译
git clone https://github.com/OpenIPC/firmware.git
cd firmware
make br-rtl8188fu-openipc-rebuild BOARD=t31
cp output/per-package/rtl8188fu-openipc/target/lib/modules/3.10.14__isvp_swan_1.0__/extra/8188fu.ko /mnt/sdcard/
SD卡插入到摄像头
modprobe mac80211
insmod /mnt/mmcblk0p1/8188fu.ko
ifup wlan0
wlan0无法上线,提示找不到设备。原来是无线网卡没有供电,需要找到对应的GPIO给网卡供上电才行。
给无线网卡供电
翻看原始固件的启动日志,找到几个可疑的值,依次尝试后终于找到了正确的GPIO值,为10,将之设为1
echo 10 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio10/direction
echo 1 > /sys/class/gpio/gpio10/value
网卡上线了,设置WiFi SSID和密码
fw_setenv wlanssid CMCC
fw_setenv wlanpass 123456
可以正常连上网了
编辑wlan0网卡的配置文件/etc/network/interfaces.d/wlan0
auto wlan0
iface wlan0 inet dhcp
pre-up echo 10 > /sys/class/gpio/export
pre-up echo out > /sys/class/gpio/gpio10/direction
pre-up echo 1 > /sys/class/gpio/gpio10/value
pre-up modprobe mac80211
sleep 1
pre-up insmod /lib/modules/8188fu.ko
sleep 1
pre-up wlan_addr=$(fw_printenv -n wlanaddr); if [ -n "$wlan_addr" ]; then ip link set dev wlan0 address $wlan_addr; fi
post-up wpa_passphrase "$(fw_printenv -n wlanssid || echo OpenIPC)" "$(fw_printenv -n wlanpass || echo OpenIPC12345)" > /tmp/wpa_supplicant.conf
post-up sed -i '2i \\tscan_ssid=1' /tmp/wpa_supplicant.conf
post-up wpa_supplicant -B -i wlan0 -D nl80211,wext -c /tmp/wpa_supplicant.conf
post-down killall -q wpa_supplicant
其他GPIO
GPIO | 作用 |
---|---|
10 | 无线网卡供电 |
16 | LED Red |
17 | LED Green |
57 | IR-CUT 1 |
58 | IR-CUT 2 |
GPIO16和GPIO17共同控制LED状态指示灯的颜色,组合如下
GPIO16 | GPIO17 | 指示灯颜色 |
---|---|---|
1 | 1 | 熄灭 |
1 | 0 | 红色 |
0 | 1 | 绿色 |
0 | 0 | 黄色 |
遗憾的是没有找到红外补光灯的GPIO值