关键词:闻上云 ws215i 内核编译
ATOM+2G+4G的诡异配置电子垃圾
硬件部分:
Intel ATOM CE5315 SOC(图中橙色框)
四块三星512M内存颗粒(图中绿色框)
4G的闪迪 SD1N7DP2-40 EMMC(图中红色框)
板载一个用途未知的pcie接口(图中粉色框,可能是设计之初用于WiFi模块但是因不明原因没有安装。)
IO:
- USB3.0*2
- HDMI
- RJ45千兆网口
首先简单介绍一下ws215i的硬件,年代久远的atom soc,只有4G而且还是emmc的存储颗粒已经给开发造成了不小的困难;不过所幸官方有提供内核源代码,然而这里就是一个坑了。
系统部分
OpenMediaVault(下文简称OMV)无需过多介绍,开源NAS系统,基于debian,界面扁平化,简单易用还稳定(我自己都不信)
然而刚开始就碰到了第一个坑,虽然这个坑比较好解决
在运行apt update或omv-update以及安装任何deb包后,都会有这样一段报错
1 | Exception ignored in:.remove at 0x76125420>Traceback (most recent call last): File "/usr/lib/python3.5/weakref.py", line 117, in removeTypeError: 'NoneType' object is not callableException ignored in:.remove at 0x76125420> |
解决办法也很简单
vim /usr/lib/python3.5/weakref.py
将
1 | def remove(wr, selfref=ref(self)): |
修改为
1 | def remove(wr, selfref=ref(self),_atomic_removal=_remove_dead_weakref): |
将
1 | _remove_dead_weakref(d, wr.key) |
修改为
1 | _atomic_removal(d, wr.key) |
即可解决
然而这才刚过第一关,更新完软件包,配置完raid,加载增强插件OMV-EXTRAS,配置完webdav后,到了docker部分,这里是第二个坑。
内核部分
寻找源代码
docker安装完报错无法启动,经过查看log显示缺少aufs支持和nf_nat模块,询问刷机包作者答复官方并没有给出内核源代码,本应有源代码的仓库中只有一个readme。
官方GitHub仓库https://github.com/wisnuc 中确实并没有内核源代码,然而提交者@matianfu-wisnuc所commit的另一个仓库指向了一条线索,该账号于https://github.com/matianfu/ws215i 中提交了一份内核的deb文件,而这个仓库确实如作者所说只有一个readme,并没有源代码,然而readme中的内容又引出一条新的线索
1 | sudo apt-get install build-essential linux-source kernel-package libncurses5-dev fakeroot |
其中barcelona-4.3.3文件夹所指的 应该是同账号下另一个仓库 https://github.com/matianfu/barcelona-4.3.3 而根据该仓库的commits记录,其确实为加入CE53XX系列soc驱动的定制版4.3.3内核 (足以可见该公司GitHub使用是多么的不规范)
编译
笔者为节约时间选择使用Windows Subsystem for Linux进行编译
其中有两个坑
gcc6+的一个已知问题 内核编译不支持使用PIC模式:
在gcc 6+版本中默认启用PIE,而这是gcc的一个已知问题,目前为止官方并没有进行修复,因此只能修改makefile文件:在
KBUILD_CFLAGS
后加上-fno-pie
Function not implemented This may be due to a lack of SYSV IPC support.
WSL下fakeroot存在问题,可以通过
sudo update-alternatives --set fakeroot /usr/bin/fakeroot-tcp
进行解决
完成
运行make menuconfig
并勾选nf_nat、iptable及其下全部支持、overlayfs文件系统支持
运行
1 | make -j16 && make-kpkg --rootcmd=fakeroot --initrd --jobs=8 kernel_image kernel_headers |
即可编译完成并打包deb文件在上一层目录,将其上传至nas中并dpkg -i
安装并重启即刻顺利使用docker
总结
这台设备确实是挺非传统的,没有传统的BIOS,存储设备也是非传统的emmc,甚至连soc也是主线内核没有兼容的,but it work
题外话
由于这台设备的emmc只有4gb所以docker的文件不建议放在emmc内,可以使用ln -s
软链接链接至raid下