我有一个嵌入式系统,运行 3.10.9 内核和 12.04.5 Ubuntu。由于旧版 Ubuntu 操作系统存在许多安全漏洞,我正尝试升级 Ubuntu 操作系统或同时升级 Ubuntu 操作系统和内核。我已经能够更新和升级系统,但解决方案需要打包,以便我可以将其与闪存服务器一起使用。
这当前闪烁过程包含一个 PEEDI,用于将自定义引导加载程序编程到设备的 eMMC 中。设备重新启动后,它会搜索并连接到 TFTP 服务器,从 NFS 服务器安装网络驱动程序并下载 uboot、内核、dtb 文件和 rootfs 的二进制映像。然后将映像刷入 eMMC。此过程适用于 3.10.9 内核和 12.04.5 Ubuntu 操作系统。
我们知道四个主要组成部分对于嵌入式系统:
1)dtb
2)u-boot 映像
3)内核
4)根文件系统
我最初的想法是尝试简单地替换文件系统,并尽可能保持所有其他组件不变。这似乎可行,如果没有必要,为什么要编译新内核和 dtb?
- 注:该项目未保留任何原始源代码*
首先我尝试通过转到 ports.ubuntu 并打包工作文件系统,就地更新和升级设备。然后将生成的 14.04.5 LTS 文件系统放置在 TFTP 服务器上并用于刷新过程(上面列出的其他组件均未触及)。完成刷新过程并重新启动设备后,设备似乎可以正常运行并运行 Ubuntu 14.04.5 LTS。我注意到的第一件事是网络接口关闭 - 在文件系统升级之前,我有 eth0 和 wlan0。升级后,我现在有 eth1 和 wlan1。一般来说,这似乎不是一个大问题,但我的应用软件依赖于这些接口的一致性,所以这行不通。此外,我真的不知道问题的严重程度。
eth1 Link encap:Ethernet HWaddr d8:b8:f6:01:00:3d
inet addr:10.1.134.22 Bcast:10.1.134.255 Mask:255.255.255.0
inet6 addr: fe80::dab8:f6ff:fe01:3d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:77 errors:0 dropped:0 overruns:0 frame:0
TX packets:59 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9868 (9.8 KB) TX bytes:8537 (8.5 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1296 (1.2 KB) TX bytes:1296 (1.2 KB)
wlan1 Link encap:Ethernet HWaddr 88:33:14:1c:6e:61
inet6 addr: fe80::8a33:14ff:fe1c:6e61/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1808 (1.8 KB) TX bytes:2196 (2.1 KB)
配置完成后,eth1 可以运行,但我无法让 wlan1 连接。
root@device-01036e:~# ifup wlan1
Internet Systems Consortium DHCP Client 4.2.4
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/wlan1/88:33:14:1c:6e:61
Sending on LPF/wlan1/88:33:14:1c:6e:61
Sending on Socket/fallback
DHCPDISCOVER on wlan1 to 255.255.255.255 port 67 interval 2 (xid=0xaceefe56)
DHCPDISCOVER on wlan1 to 255.255.255.255 port 67 interval 5 (xid=0xaceefe56)
DHCPDISCOVER on wlan1 to 255.255.255.255 port 67 interval 4 (xid=0xaceefe56)
No DHCPOFFERS received.
No working leases in persistent database - sleeping.
接下来我尝试从以下位置拉取内核源代码https://cdn.kernel.org/pub/linux/kernel/v4.x/并使用默认配置进行编译。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
然后将新内核与 14.04.5 tarred OS 一起放在刷新服务器上,并刷新到设备上。此设备启动并显示预期的内核和操作系统版本,但网络接口无法正常工作,特别是 wlan。
sudo ifconfig wlan0 up
wlan0: ERROR while getting interface flags: No such device
问题:
1)如果编译了新内核(硬件不变),是否需要更新DTS / DTB?
2)什么原因导致接口停止正常运行?
3) 在上述刷新设置下,生成升级文件系统的最简单方法是什么? 是否可以在不接触其他组件的情况下做到这一点?