为嵌入式 ubuntu 设备刷新升级文件系统的最简单方法是什么?

为嵌入式 ubuntu 设备刷新升级文件系统的最简单方法是什么?

我有一个嵌入式系统,运行 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) 在上述刷新设置下,生成升级文件系统的最简单方法是什么? 是否可以在不接触其他组件的情况下做到这一点?

相关内容