admin 管理员组

文章数量: 887007

大约7~8年之前,搞了一台二手TC-2816AN-SF-L DVR整机,本身花了不到100元,当时想用来做监控录像设备用,后来一直没有找到能用上的地方,就一直放置吃灰了。

转眼到了2024年8月,突然心血来潮,翻出来折腾一番:

1.工作芯片:Hi3531(不是3531a),海思的芯片。

Arm cortex A9, V7架构, 双核,CPU主频 930M, 32K I/D cache, 256K L2 cache. 32M spi nor flash,128M nand flash. RAM 384M, 支持启动选择NOR或者Nand启动。有拨码开关。

外设接口,2个串口,其中1个是debug口,2个SATA接口,说明里可以支持到4T硬盘。JTAG口没有焊座。支持红外。有风扇散热。

2. 软件平台sdk:linux 3.0.8,uboot 2010.6. 可以搞到SDK开发包,里面有具体的硬件信息以及PC软件包,板级源码。

3. 内部图片如下,除了RTC电池没了,其它都是好的。

芯片功能框图:

对设备的软件调研了一下,发现:

  1. 通过Debug 串口,可以进入uboot,查看其一些启动参数。
  2. Nand Flash ID: K9F1G0bU0C, Nor Flash ID: MX25L25635E。 其中Nor Flash ID不在官方发布的uboot 中支持的flash 之列。

如果要重新编译烧写uboot,则需要配置相关的xslx 文件,支持新的Nor Flash。这部分可操作性难度太大。Kernel也是同理。

因此确定方案,uboot和kernel使用原设备的固件。是否可以更换rootfs,以使其具备通用Linux 主机的特点。

  1. 因Flash空间太小,放不下大的系统。计划使用U盘或者SATA硬盘做rootfs启动盘。
  2. 目前的ARM系统,基于debian 的系统较多,而且官方发布也有相应的支持,决定采用debian系统。
  3. 把uboot中的bootargs, root=/dev/mtdblock2 rootfstype=jffs2 改为 root=/dev/sda1 rootfstype=ext4,这样sata 就是启动盘了。

开始在做系统的过程中,先用Armbian的系统修改,发现差别太大,启动时异常太多。原因是Armbian的系统比较新,需要较高版本内核的支持。

而且Armbian是针对不同型号的开发板,分别适配的,没有Hi3531的芯片适配版本,只好用别的类似开发板的,硬件差别也比较大。最终不得不

因为差异较大而放弃。

Armbian是基于Debian系统做的,因此转向了Debian系统。因为内核比较旧,3.0.8版本,因此选用Debian Wheezy 或者Jessia,这个版本,内核

是2.6 版本的,应该可以用。

正式开始下载:

mkdir fs_debian_wheezy

sudo debootstrap --arch=armhf --foreign wheezy fs_debian_wheezy Index of /debian

mkdir fs_debian_jessie

sudo debootstrap --arch=armhf --foreign jessie fs_debian_jessie Index of /debian

在网上找到别的板子的Debian系统:
Wandboard Debian Wheezy 7.2
--------------------------------------------------------------------------------
u-boot and rootfs
a.uboot-wand.tar.xz
- md5: 24927d9f8daaccf2dfdd8c70bc19c6c9
b.debian-wheezy-7.2-rootfs-3.0.35.8-armhf.tar.xz
- md5:5ef848016a374a9272b34f9d610ad2c8

与官网上下载的对比了一下,发现Wandboard这个rootfs的文件比较多,而且同名的文件,基本上二进制是相同的,因此改使用Wandboard这个rootfs。

基本方法是把这个rootfs解压到sata硬盘的根目录下,然后在DVR上启动。

过程问题记录:

1. sata硬盘挂载失败。Unsupported feature metadata_csum

这种情况是因为mkfs.ext4的时候制定的参数,旧的内核不支持导致.

The ext4 feature (400) is the new metadata_csum feature. If this feature is enabled and old tools are used to mount the filesystem they will only be able to mount read-only.

解决方法:

sudo tune2fs -O ^metadata_csum /dev/sdb1

或者格式化的时候,

sudo mkfs.ext4 -O ^metadata_csum /dev/sdb1

2. 启动时报没有发现网卡。socket为基础的应用无法启动初始化。

问题原因是设备的网卡驱动是特有的,没有固化在内核中,需要加载.ko。

从原Nor flash 文件系统中找到ko文件,并在脚本里进行insmod,网卡可以初始化。

同理,把原设备的文件系统里的一些文件,都做到新的rootfs文件系统里,包括/etc 下的一些init rc,udev等。这些是必须使用原系统的配置初始化的。

3. 启动时,在如下log卡时间较久,3分钟左右:Waiting for /dev to be fully populated

查了些资料,不适合我的情况。没有找到原因和解决方法,好在不是严重到无法启动,暂时忽略。

4. 系统启动时,dhcp初始化,但我想使用固定IP,如何配置?

[....] Configuring network interfaces...Internet Systems Consortium DHCP Client 4.2.2

Copyright 2004-2011 Internet Systems Consortium.

All rights reserved.

For info, please visit ISC DHCP - ISC

Listening on LPF/eth0/22:16:1b:28:d2:72

Sending on LPF/eth0/22:16:1b:28:d2:72

Sending on Socket/fallback

DHCPREQUEST on eth0 to 255.255.255.255 port 67

DHCPACK from 192.168.1.1

Reloading /etc/samba/smb.conf: smbd only.

/etc/resolvconf/update.d/libc: Warning: /etc/resolv.conf is not a symbolic link to /etc/resolvconf/run/resolv.conf

bound to 192.168.1.154 -- renewal in 241931 seconds.

done.

解决方法:/etc/network/interfaces 中关于primary network interface

auto eth0

iface eth0 inet dhcp //注释掉这行,就不启动dhcp了。猜测是这个设置触发了dhcp 的client启动规则。

5. ping 外网失败。

解决方法:/etc/network/interfaces 文件,关于eth0配置

dns 配置:

iface eth0 inet static

address x.x.x.x

netmask 255.255.255.0

gateway x.x.x.x

dns-nameservers x.x.x.x 0.0.0.0

详细介绍resolveconf 的dns配置方法:

NetworkConfiguration - Debian Wiki 

6. 安装的armhf wheezy,但uname显示有armv7l, 是不是需要装armv7l的版本 wheezy?kennel 和 App 的编译器不同。

debian@debian-armhf:/etc/default$ uname -a

Linux debian-armhf 3.0.8 #3 SMP Mon May 21 16:13:00 CST 2012 armv7l GNU/Linux

因运行未发现问题,暂时忽略。

经过以上折腾,解决了启动中的一些关键问题,最终使用Sata硬盘做wheezy启动盘成功。可以SSH到设备上,通过apt-get安装更新软件。目标达成!

多多少少还有一些问题,比如HDMI 显示不正常,启动脚本rcS会运行2次,shutdown 无法真正断电等,还需要慢慢摸索解决。

本文标签: 系统 DVR debian