Difference between revisions of "EFlasher/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
 
(158 intermediate revisions by 5 users not shown)
Line 1: Line 1:
rom存放在sd卡的Fat分区,每个系统一个目录,目录名称可随意命令(但不能是中文),下面的4个目录代表有4个可以预装的系统: <br />
+
[[EFlasher|English]]
<img>
+
对面的系统:
+
::[[File:Eflasher-oslist.png| frameless|400px|Eflasher-oslist]]
+
  
<br />
+
== eFlasher介绍 ==
每个目录下有如下文件,分别作用为:
+
eFlasher (eMMC-flasher) 是FriendlyElec官方发布的工具,让用户能方便和轻松地将系统安装到板载的eMMC上运行,甚至可以抛开电脑,就能让你在多个系统中,选择并安装上你想要的系统。
 +
<br /><br />
 +
eFlasher同时为量产提供了灵活的设置选项,以方便工厂量产时安装定制系统。 <br />
 +
<br />
 +
eFlasher为方便使用,提供了图形界面与命令行两个版本,为方便描述,这里为它们分别命名为: eflasher-gui 和 eflasher-console:<br />
 +
1) eflasher-gui: 有图形界面的eFlasher,推荐有LCD屏或者HDMI显示的用户使用,可以使用触摸屏操作,没有触摸屏时也可以使用鼠标操作,也支持VNC远程操作;<br />
 +
2) eflasher-console: 命令行版本的eFlasher,可在串口终端或者ssh命令行上使用;<br />
 +
<br />
  
 +
== eFlasher 的安装 ==
 +
 +
* 第一步: 下载包含eflasher工具的固件 <br />
 +
到你所购买的板子相关WiKi页面,找到下载固件的章节,下载固件文件名为:XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz 的固件(其中XXXX替换为板子所在的平台型号, YYYYMMDD是该固件发布的日期), <br />
 +
这个固件内已经包含了所属平台的所有官方系统映象,包括最新版本的 Debian, Android 和 Ubuntu 系统 (不同的平台提供的系统有所不同);<br />
 +
将 XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz 下载到电脑上,在Windows下制作SD卡,还需要下载Windows下的烧写工具: win32diskimager.rar;<br />
 +
* 第二步: 制作SD启动卡 <br />
 +
将固件用7z软件解压,得到.img结尾的文件,在Windows下插入SDHC卡(限32G及以上的卡),以管理员身份运行Win32DiskImager,选择 Image File载入固件,选择你的SD卡盘符,点 Write 即开始写Image到SD卡;<br />
 +
如果你的电脑用的是Linux系统,你也可以用 dd 命令将解压后得到的 .img 文件直接写入SD卡完成启动卡的制作;<br />
 +
* 第三步: 启动eFlasher工具
 +
将制作好的SD卡插入开发板,上电,如你有HDMI、LCD或者USB2LCD,可以在上电之前先连接好。<br />
 +
部分开发板需要按住标住有“BOOT”字样的按键,才能从SD卡启动系统。<br />
 +
 +
== eFlasher系统的登录 ==
 +
在命令行模式下使用以下帐号登录:<br />
 +
用户名: root<br />
 +
密码: fa<br />
 +
如果通过ssh登录,eFlasher系统的IP地址默认为 192.168.1.231<br />
 +
 +
== 启动图形界面版本的eFlasher ==
 +
系统启动时,图形界面版本的eFlasher会随系统自动启动,如你有连接HDMI或者LCD,应该会看到如下所示的界面: <br />
 +
::[[File:Eflasher-gui-ui.png| frameless|500px|Eflasher-gui]]
 +
 +
点击触摸屏,或者用鼠标选择你需要烧写到eMMC的系统即可。<br />
 +
 +
== 通过VNC远程控制eFlasher烧写 ==
 +
eFlasher支持使用VNC来远程控制,在没有LCD和HDMI屏幕的情况下,可以通过电脑上的VNC客户端来操作eFlasher。<br />
 +
VNC客户端属于免费软件,可以到官方去下载,多个平台的下载链接:<br />
 +
https://www.realvnc.com/en/connect/download/vnc/<br />
 +
<br />
 +
<b>使用方法:</b>
 +
由于eFlasher使用固定的IP地址:192.168.1.231,所以需要设置你的电脑IP地址为192.168.1网段的IP。<br />
 +
在VNC客户端创建一个新设备,在地址栏上填写:  192.168.1.231:5900,然后点击 Connect 即可。<br />
 +
<br />
 +
<b>示例:以下图片演示了在 iPhone 上通过VNC 为T3 Plus更新系统:</b>
 +
::[[File:Eflasher-vnc.png| frameless|600px]]
 +
<br />
 +
 +
== 启动命令行版本的eFlasher ==
 +
===命令行直接安装系统===
 +
显示帮助信息:
 +
<pre>
 +
# eflasher --help
 +
-------------------------------------------------------
 +
USAGE: eflasher [-i, --install <arg>]
 +
 +
OPTIONAL:
 +
-i, --install <path>:  Install OS to eMMC without UI operation
 +
-r, --restore <file>:  Restore backup file to eMMC without UI operation
 +
-e, --exclude <files>: Ignore certain files, multiple files separated by commas
 +
--low-format:          Low format the flash before burning
 +
--auto-exit:          Automatically exit eflahser after burning or restoring
 +
--disable-overlayfs:  Disable overlay filesystem
 +
-c, --conf <arg>:      Set eflasher configuration file
 +
-l, --list-devices:    List the supported board models
 +
-v, --version:        Output version information
 +
-h, --help:            Show this usage
 +
-g, --gui:            Start eflasher gui
 +
</pre>
 +
指定路径直接安装系统:
 +
<pre>
 +
# eflasher -i /mnt/sdcard/friendlycore-xenial_4.14_armhf
 +
Using config file:  "/tmp/eflasher.conf"
 +
-------------------------------------------------------
 +
>>friendlycore-xenial_4.14_armhf
 +
Ready to Go with FriendlyCore,Total size: 1.10 GB,
 +
Installing FriendlyCore ..., , ,
 +
Finish!,Speed: 20.71 MB/s
 +
</pre>
 +
===命令行交互模式===
 +
如果板子没有连接显示设备,可以通过串口或ssh登录开发板,在命令行终端下输入命令 eflasher也可以进入eflasher的命令行交互界面,命令行交互界面如下图所示: <br />
 +
<pre>
 +
----------------------------------------------------------------------
 +
  EFlasher v1.2 b190111 running on NanoPC-T4
 +
    Doc: http://wiki.friendlyelec.com/wiki/index.php/EFlasher
 +
    eMMC: 14.56 GB
 +
----------------------------------------------------------------------
 +
  # Select an OS to install:
 +
    1) Android 8
 +
 
 +
  # Select your backup target device:
 +
    tf) [*] TF card  (/dev/mmcblk0p1 - 4.27 GB free - 5.67 GB total - fuseblk)
 +
    usb) [ ] USB disk  (<none>)
 +
 
 +
  # Backup eMMC flash to TF card:
 +
    Not enough free disk space on your TF card
 +
 
 +
  # Restore eMMC flash from backup file:
 +
    No backup files found
 +
 
 +
  # Configure automatic job:
 +
    aui) Automatic installing (Curr:Off)
 +
    aur) Automatic restoring (Curr:Off)
 +
 
 +
  # Format drive
 +
    ftf) Format TF card back to original size
 +
----------------------------------------------------------------------
 +
>>> Enter an option (1/tf/usb/aui/aur/ftf) :
 +
</pre>
 +
 +
== 开机自动烧写指定的系统 ==
 +
=== 默认已开启自动烧写 ===
 +
所有文件名为XXXX-eflasher-OS-YYYYMMDD.img.gz的单个OS的固件,默认情况下均开启了自动烧写,如果你不希望开机自动烧写,请使用文件名为 XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz 的固件。
 +
=== 配置方法 ===
 +
有三种途径可以进行配置:<br />
 +
* 方法1:在图形界面上,选择你要烧写的系统,在Ready to Go预览界面上,在屏幕下方钩选 "Start automatically at startup" 。<br />
 +
* 方法2:  将SD卡挂载到Windows电脑上,用notepad+文本编辑器在SD卡的Fat分区上新建一个名为eflasher.conf文件 (如果已存在就直接编辑即可),其内容如下:<br />
 +
<syntaxhighlight lang="bash">
 +
[General]
 +
autoStart=/mnt/sdcard/XXXXXX
 +
</syntaxhighlight>
 +
其中,XXXXXX替换成SD卡中存放固件的目录名,例如H3平台的FriendlyCore系统目录名为 friendlycore-xenial_4.14_armhf。
 +
* 方法3:  开发板运行状态下,通过串口终端,用vi编辑文件:/mnt/sdcard/eflasher.conf,文件不存在就新增一个,内容同上面的方法2。<br />
 +
=== 自动烧写的进度指示 ===
 +
上电开机时,板上的状态灯先是呈呼吸灯状态,开机烧写固件时状态灯会快闪,烧写完成后变成慢闪,并一直停留在慢闪状态。<br />
 +
状态灯通常为蓝灯,某些平台板子可能会是其他颜色。<br />
 +
也可以利用 LCD2USB 模块,或者LCD和HDMI屏幕,得到可视化的进度指示。<br />
 +
 +
== 烧写或恢复系统完成后做些其他事情 ==
 +
在量产时,你可能会希望在烧写系统完成后做一些额外的事情,比如点亮某个LED,你可以修改 /opt/run-eflasher.sh 脚本,在 "./eflasher-gui" 开头这一行的后面加入代码,例如下面的示例,在烧写完成后,设置某个GPIO针脚:
 +
<syntaxhighlight lang="bash">
 +
./eflasher-gui -qws >/dev/null 2>&1
 +
echo 13 > /sys/class/gpio/export
 +
echo out > /sys/class/gpio/gpio13/direction
 +
echo 0 > /sys/class/gpio/gpio13/value
 +
echo 13 > /sys/class/gpio/unexport
 +
</syntaxhighlight>
 +
以下脚本则演示在S5P4418/S5P6818平台上, 烧写系统后, 将cpu id写入到eMMC系统的 /etc/cpuid.txt 文件中:
 +
<syntaxhighlight lang="bash">
 +
./eflasher-gui -qws >/dev/null 2>&1
 +
partprobe /dev/mmcblk1
 +
mount /dev/mmcblk1p2 /media/
 +
cat /sys/devices/platform/cpu/uuid > /media/etc/cpuid.txt
 +
umount /media/
 +
</syntaxhighlight>
 +
要让上面的脚本正常运作,我们还需要设置让 eflasher-gui 在烧写完成后自动退出,需要做以下设置:<br />
 +
用notepad+文本编辑器在SD卡的Fat分区上编辑并新建一个名为eflasher.conf文件,将AutoExit字段设置为True:<br />
 +
<syntaxhighlight lang="bash">
 +
[General]
 +
autoStart=/mnt/sdcard/friendlycore-xenial
 +
autoExit=true
 +
</syntaxhighlight>
 +
autoStart字段则是指定开机自动烧写指定的系统而无需交互, 如果没有连接屏幕, 可以通过 LED 烧来识别烧写状态, 默认情况下, 绿色LED快闪表示正在烧写.
 +
<br />
 +
 +
== eMMC Flash的备份和恢复 ==
 +
 +
这个功能类拟于电脑上面的 ghost 软件,可以将整个 eMMC Flash 的数据备份到 U盘 或 移动硬盘,或者从 U盘 恢复系统到 eMMC Flash,恢复系统时,可以恢复到 同一个开发板,也可以恢复到 同型号同规格的其他开发板。<br /><br />
 +
<b>为产品量产提供的便利</b>:<br />
 +
在一块开发板上做好定制,比如预装好软件和设置,然后备份一份出来,恢复到其他开发板上,以达到量产的目的,由于是对eMMC Flash进行祼读和祼写,所以支持包括 Android和Linux 在内的所有系统及数据。<br />
 +
<br />
 +
功能要求:<br />
 +
此功能要求你有一个容易大过 eMMC Flash 大小的U盘,或者移动硬盘,并且里面没有重要的数据,最好事先格式化为exFat或者ntfs格式,在必要时,EFlasher可能会对你磁盘进行重新分区及格式化 (会事先询问)。
 +
<br />
 +
 +
=== 图形界面上执行备份和恢复 ===
 +
 +
在 EFlasher 界面上点击 Backup and Restore 进入备份菜单,根据提示操作即可,如下图所示:<br />
 +
::[[File:eflasher_index.png| frameless|600px|eflasher_index]]<br />
 +
<br />
 +
 +
====选择备份文件的存储位置====
 +
可以将备份文件放在 TF 卡,或者USB存储设备。
 +
=====备份到TF卡=====
 +
::[[File:eflasher_backup_tf.png| frameless|600px|eflasher_backup_tf]]<br />
 +
你的TF卡的大小应该大于或等于两倍的eMMC大小,例如eMMC是8G,则你应该准备一张16G的TF card。<br />
 +
默认情况下,8G以上的 TF 卡在 eFlasher 系统下并没有利用上所有的空间,需要做一次格式化,请点击界面上的 "Format TF card back to original size" 按钮进行格式化。<br />
 +
* 点击 "Backup eMMC Flash" 按钮开始备份整个 eMMC 的所有数据;
 +
* 点击 "Restore eMMC Flash from backup file" 按钮开始恢复数据到 eMMC;
 +
 +
=====备份到USB存储设备=====
 +
::[[File:eflasher_backup_udisk.png| frameless|600px|eflasher_backup_udisk]]<br />
 +
USB存储设备最好是 ext4/exfat/ntfs 格式的,如果不是,可以点击界面上的 "Re-layout and format USB Drive" 按钮对USB存储设备进行一次格式化,注意,此操作会丢失所有数据。
 +
* 点击 "Backup eMMC Flash" 按钮开始备份整个 eMMC 的所有数据;
 +
* 点击 "Restore eMMC Flash from backup file" 按钮开始恢复数据到 eMMC;
 +
 +
=====开始备份=====
 +
点击 "Backup eMMC Flash" 按钮, 选择备份文件 (扩展名为.raw) 的保存路径,然后开始备份,如下图所示:<br />
 +
::[[File:eflasher_backup.png| frameless|600px|eflasher_backup]]<br />
 +
 +
=====开始恢复=====
 +
点击 "Restore eMMC Flash from backup file" 按钮, 选择raw文件后开始恢复数据到 eMMC,如下图所示:<br />
 +
::[[File:eflasher_restore.png| frameless|600px|eflasher_restore]]<br />
 +
 +
===命令行进行备份和恢复  ===
 +
在命令行终端执行以下命令启动命令行EFlasher,命令行终端可以是ssh或者串口终端:
 +
<syntaxhighlight lang="bash">
 +
# eflasher
 +
</syntaxhighlight>
 +
 +
然后你会看到如下功能菜单项:
 +
<pre>
 +
----------------------------------------------------------------------
 +
  EFlasher v1.2 b190111 running on NanoPC-T4
 +
    Doc: http://wiki.friendlyelec.com/wiki/index.php/EFlasher
 +
    eMMC: 14.56 GB
 +
----------------------------------------------------------------------
 +
  # Select an OS to install:
 +
    1) Android 8
 +
 
 +
  # Select your backup target device:
 +
    tf) [*] TF card  (/dev/mmcblk0p1 - 4.27 GB free - 5.67 GB total - fuseblk)
 +
    usb) [ ] USB disk  (<none>)
 +
 
 +
  # Backup eMMC flash to TF card:
 +
    Not enough free disk space on your TF card
 +
 
 +
  # Restore eMMC flash from backup file:
 +
    No backup files found
 +
 
 +
  # Configure automatic job:
 +
    aui) Automatic installing (Curr:Off)
 +
    aur) Automatic restoring (Curr:Off)
 +
 
 +
  # Format drive
 +
    ftf) Format TF card back to original size
 +
----------------------------------------------------------------------
 +
>>> Enter an option (1/tf/usb/aui/aur/ftf) :
 +
</pre>
 +
 +
====选择备份文件的存储位置====
 +
可以将备份文件放在 TF 卡,或者USB存储设备,用 tf 和 usb 命令进行切换。
 +
=====备份到TF卡=====
 +
你的TF卡的大小应该大于或等于两倍的eMMC大小,例如eMMC是8G,则你应该准备一张16G的TF card。<br />
 +
默认情况下,8G以上的 TF 卡在 eFlasher 系统下并没有利用上所有的空间,需要做一次格式化,使用菜单上的 ftf 命令即可。<br />
 +
=====备份到USB存储设备=====
 +
USB存储设备最好是 ext4/exfat/ntfs 格式的,如果不是,可以使用菜单上的 ftf 对USB存储设备进行一次格式化,注意,此操作会丢失所有数据。
 +
 +
=====开始备份=====
 +
根椐菜单项前面插号的指示, 输入bk并按回车启动备份,在命令行模式下,EFlasher会立即开始备份,存储为扩展名为raw的文件,如下图所示:<br />
 +
<syntaxhighlight lang="bash">
 +
----------------------------------------------------------------------
 +
  Backing up eMMC to /mnt/udisk/nanopc-t3-emmc.raw
 +
----------------------------------------------------------------------
 +
  Speed: 15.01 MB/s
 +
  Remaining Time: 00:12:53
 +
  [===========_______________________________________]  22%
 +
----------------------------------------------------------------------
 +
  >>>If you want to cancel, input "c" then press <Enter> key.
 +
</syntaxhighlight>
 +
 +
===扩展功能  ===
 +
 +
EFlasher允许你编写一些 Linux shell 脚本,来对 eMMC 的 boot分区或者根文件系统分区进行内容更改,比如:<br />
 +
1)增加个性化的开机LOGO<br />
 +
2)为板子分配静态的IP地址,或者MAC地址<br />
 +
3)通过网络更新数据,软件<br />
 +
4)  等等<br />
 +
EFlasher在完成对 eMMC 的恢复操作之后,自动执行你的脚本。<br />
 +
你的脚本需要放在一个单独的目录下,这个目录需要与备份文件同级,目录名称的命令规则是: 备份文件名+.d,例如 备份文件名是 xxxx.raw,则脚本目录名应为 xxxx.raw.d。<br/>
 +
EFlasher 在默认情况下,会为你的备份文件生成一个清理脚本,其作用是对文件系统做一些常规的清理工作,例如清理 tmp 目录下的临时文件、var目录下的log等等。<br />
 +
你可以通过参考 EFlasher 生成的清理脚本来了解应该如何访问 eMMC 的boot分区和根分区。<br />
 +
<syntaxhighlight lang="bash">
 +
root@NanoPC-T3:/mnt/udisk/nanopc-t3-emmc.raw.d# tree
 +
.
 +
|-- cleanup.sh
 +
`-- README.txt
 +
 +
0 directories, 2 files
 +
root@NanoPC-T3:/mnt/udisk/nanopc-t3-emmc.raw.d#
 +
</syntaxhighlight>
 +
 +
(注: 使用开机自动还原功能时,此特性不起作用)
 +
 +
=== 开机自动恢复指定的备份 ===
 +
有三种途径可以进行配置:<br />
 +
* 方法1:在图形界面上,进入Backup and restore界面,先选择备份文件所在的存储设备,可选择TF card或者USB disk,选择 Turn on "Automatic restoring" ,然后选择要恢复的文件即可。<br />
 +
* 方法2:  将存放有备份文件的设备(TF卡或U盘)挂载到电脑上,用notepad+文本编辑器在根目录新建一个名为eflasher.conf文件 (如果已存在就直接编辑即可),示例内容如下:<br />
 +
<syntaxhighlight lang="bash">
 +
[General]
 +
autoStart=/mnt/sdcard/nanopct3-backup-20190101.raw
 +
</syntaxhighlight>
 +
其中,/mnt/sdcard/代表TF card,/mnt/udisk代表USB磁盘.
 +
* 方法3:  开发板运行状态下,通过串口终端,如果备份文件位于TF卡,用vi编辑文件:/mnt/sdcard/eflasher.conf, 如果备份文件位于 USB存储设备,用vi编辑文件:/mnt/udisk/eflasher.conf,文件不存在就新增一个,内容同上面的方法2。<br />
 +
 +
== 安装系统到M.2或USB硬盘(仅适用于rockchip平台) ==
 +
=== 使用eMMC引导 ===
 +
eFlasher支持将引导和系统分别安装到不同存储设备,但是由于CPU不支持直接从M.2和USB设备引导,所以虽然系统可以安装到M.2和USB设备,但是引导仍然需要安装到eMMC或者TF卡。<br />
 +
* 在eFlasher界面上 选择从eMMC引导:<br />
 +
[[File:Eflasher-select-boot-device.png| frameless|400px]]<br />
 +
* 在eFlasher界面上, 选择将rootfs安装到NVMe硬盘:<br />
 +
[[File:Eflasher-select-system-device.png| frameless|400px]]<br />
 +
系统安装完成后,两个存储设备的分区布局如下所示:
 +
* eMMC分区布局
 +
<syntaxhighlight lang="bash">
 +
# parted -s /dev/mmcblk2 unit MiB print
 +
Number  Start    End      Size    File system  Name      Flags
 +
1      8.00MiB  12.0MiB  4.00MiB              uboot
 +
2      12.0MiB  16.0MiB  4.00MiB              misc
 +
3      16.0MiB  20.0MiB  4.00MiB              dtbo
 +
4      20.0MiB  36.0MiB  16.0MiB              resource
 +
5      36.0MiB  76.0MiB  40.0MiB              kernel
 +
6      76.0MiB  108MiB  32.0MiB              boot
 +
7      108MiB  140MiB  32.0MiB              recovery
 +
</syntaxhighlight>
 +
* M.2硬盘布局
 +
<syntaxhighlight lang="bash">
 +
# parted -s /dev/nvme0n1 unit MiB print
 +
Number  Start    End        Size      File system  Name      Flags
 +
1      8.00MiB  4616MiB    4608MiB    ext4        rootfs
 +
2      4616MiB  238475MiB  233859MiB  ext4        userdata
 +
</syntaxhighlight>
 +
=== 使用TF卡引导 ===
 +
如果开发板没有eMMC,可以使用TF来引导,不过你需要准备2张TF卡,一张用来运行eFlasher系统,另一个用来安装系统。<br />
 +
操作与上一个章节使用eMMC引导的方法基本相同,不同之处是, 需要将TF卡通过USB读卡器插入开发板的USB端口,然后在选择引导设备菜单中选择它。<br />
 +
=== 挂载硬盘上已有的文件系统(btrfs格式) ===
 +
本章节仅仅是为了演示一种更灵活的系统安装方法,在电脑上预先准备好硬盘上的文件系统。<br />
 +
好处是可以灵活选择文件系统的格式,比如官方使用OverlayFS+Ext4, 你可以选择使用 Btrfs 作为文件系统格式。<br />
 +
也可以通过UUID来挂载根文件系统,自由设置挂载参数等,下面将展示具体步骤。<br />
 +
* 使用fdisk给硬盘分区 (假设设备名为/dev/sdX)
 +
<syntaxhighlight lang="bash">
 +
sudo fdisk /dev/sdX
 +
</syntaxhighlight>
 +
创建分区:
 +
<syntaxhighlight lang="bash">
 +
Command (m for help): g
 +
Created a new GPT disklabel (GUID: 3D6A24F1-9077-4587-9A01-66A7149F236F).
 +
 +
Command (m for help): n
 +
Partition number (1-128, default 1):
 +
First sector (2048-976773134, default 2048):
 +
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-976773134, default 976773119):
 +
 +
Created a new partition 1 of type 'Linux filesystem' and of size 465.8 GiB.
 +
 +
Command (m for help): w
 +
The partition table has been altered.
 +
Calling ioctl() to re-read partition table.
 +
Syncing disks.
 +
</syntaxhighlight>
 +
* 格式化为Btrfs
 +
<syntaxhighlight lang="bash">
 +
sudo mkfs.btrfs -f /dev/sdX1
 +
</syntaxhighlight>
 +
* 查看uuid
 +
<syntaxhighlight lang="bash">
 +
$ sudo blkid | grep /dev/sdX1
 +
/dev/sdX1: UUID="78e066a3-3c2b-47b2-9404-ed6d9463f1b2" UUID_SUB="9fd08169-d6e9-47d2-b247-56ef5a8899d9" BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="3b89b71b-f8a0-4428-a2c6-1aa516ce065d"
 +
</syntaxhighlight>
 +
* 挂载硬盘
 +
<syntaxhighlight lang="bash">
 +
sudo mount /dev/sdX1 /mnt/usb500g
 +
</syntaxhighlight>
 +
* 下载官方rootfs包,这里用debian core举例,在网盘的06_开头的目录中可找到压缩包
 +
<syntaxhighlight lang="bash">
 +
06_File\ systems/rootfs-debian-bookworm-core-arm64.tgz
 +
</syntaxhighlight>
 +
* 解压rootfs到硬盘
 +
<syntaxhighlight lang="bash">
 +
sudo tar xvzfp /tmp/rootfs-debian-bookworm-core-arm64.tgz --strip-components 2 -C /mnt/usb500g --numeric-owner --same-owner
 +
</syntaxhighlight>
 +
* 卸载硬盘
 +
<syntaxhighlight lang="bash">
 +
sudo umount /mnt/usb500g
 +
</syntaxhighlight>
 +
* 修改eFlasher烧写卡中的命令行参数
 +
在电脑上挂载eflasher烧写卡的第一个分区到/mnt/sdcard,然后编辑info.conf
 +
<syntaxhighlight lang="bash">
 +
vi /mnt/sdcard/debian-bookworm-core-arm64/info.conf
 +
</syntaxhighlight>
 +
在info.conf中增加如下内容, 指示内核通过UUID挂载Linux文件系统,取消userdata分区(即不使用OverlayFS), 由于我的硬盘不支持discard特性,因此还指定了nodiscard参数:
 +
<syntaxhighlight lang="bash">
 +
bootargs-ext=root=PARTUUID=3b89b71b-f8a0-4428-a2c6-1aa516ce065d data= rootflags=nodiscard
 +
</syntaxhighlight>
 +
* 将eFlasher烧写卡插入开发板,开机,选择Boot设备为eMMC,而System设备则选择"Skip Flashing",进行烧写即可:
 +
[[File:Eflasher-noflashing-system.png|frameless|400px]]<br />
 +
=== 制作使用Btrfs的固件 ===
 +
方法是用sd-fuse_rkXXXX仓库里的build-rootfs-img.sh打包rootfs.img时传入FS_TYPE=btrfs的参数,例如:
 +
<syntaxhighlight lang="bash">
 +
sudo -E FS_TYPE=btrfs ./build-rootfs-img.sh ubuntu-focal-desktop-arm64/rootfs ubuntu-focal-desktop-arm64
 +
</syntaxhighlight>
 +
完整的脚本请参考 https://github.com/friendlyarm/sd-fuse_rk3588/blob/kernel-6.1.y/test/test-btrfs-rootfs.sh
 +
== 针对量产用户的定制选项==
 +
=== EFlasher对系统映象的管理 ===
 +
EFlasher会从SD卡的Fat分区读取系统映象文件,将SD卡插入Windows的电脑,你可以直接管理这些映象文件。<br />
 +
在SD卡的Fat分区,根目录下的每一个子目录,代表一个OS,目录名称可随意命令(但不能是中文), <br />
 +
如果SD卡的Fat分区空间不够用,你也可以在一个U盘中存放这些系统文件,目录结构与SD卡的相同。<br />
 +
<br />
 +
例如Fat分区有下面4个目录: <br />
 +
[[File:Eflasher-folder.png| frameless|400px|Eflasher-folder]]<br />
 +
对应以下4个可安装的系统: <br />
 +
[[File:Eflasher-oslist.png| frameless|400px|Eflasher-oslist]]<br />
 +
<br />
 +
每个目录下的文件,分别说明如下:<br />
 
烧写配置文件:<br />
 
烧写配置文件:<br />
 
::{| class="wikitable"
 
::{| class="wikitable"
Line 17: Line 405:
 
version=2016-11-17  ---> 该rom的版本 (或制作的日期) <br />
 
version=2016-11-17  ---> 该rom的版本 (或制作的日期) <br />
 
icon=androidos.png  ---> 图标 <br />
 
icon=androidos.png  ---> 图标 <br />
<br />
+
上面的定义对应的显示所下:<br />[[File:Eflasher-infoconf.png| frameless|200px|Eflasher-infoconf]]<br />
上面的定义对应的显示所下:<br />
+
::[[File:Eflasher-infoconf.png| frameless|200px|Eflasher-infoconf]]
+
 
|-
 
|-
 
|}
 
|}
Line 42: Line 428:
 
|}
 
|}
  
 +
以上映象文件默认已经预装在eFlasher的固件中,不过你也可以到指定板子的下载地址下载它们,进入官方的下载地址指向的网盘目录,这些系统映象放在一个名为 images-for-eflasher 的目录下,以下是S5P6818开发板的网盘目录:<br />
 +
::[[File:Images-for-eflasher.png| frameless|600px|EImages-for-eflasher.png]] <br />
 +
 +
可以下载这个目录下的文件然后解压到SD卡的Fat分区或者U盘即可。
 +
 +
=== 设置内核启动参数 (仅支持rockchip平台) ===
 +
编辑OS目录下的info.conf配置文件, 增加bootargs-ext参数,设置要追加内核启动参数,例如,增加参数,让内核锁定使用的分辨率不超过2048的宽度:
 +
<syntaxhighlight lang="bash">
 +
bootargs-ext=rockchipdrm.fb_max_sz=2048
 +
</syntaxhighlight>
 +
如果要删除某个已经指定的参数,可以设置为空,例如删除userdata参数:
 +
<syntaxhighlight lang="bash">
 +
bootargs-ext=userdata=
 +
</syntaxhighlight>
 +
要在制作量产卡的过程中设置好内核启动参数,可参考如下脚本:
 +
https://github.com/friendlyarm/sd-fuse_rk3588/blob/kernel-6.1.y/test/test-custom-bootargs.sh
 +
 +
=== 制作自已的量产Eflasher烧写卡 ===
 +
请访问CPU型号右边的链接,在README_cn.md文件中搜索关键字"备份文件系统并创建SD映像", 或者在README.md文件中搜索关键字"Backup rootfs and create custom SD image"。
 +
{| class="wikitable"
 +
|-
 +
! CPU !! Link
 +
|-
 +
| H3 || [https://github.com/friendlyarm/sd-fuse_h3 sd-fuse_h3]
 +
|-
 +
| H5 || [https://github.com/friendlyarm/sd-fuse_h5 sd-fuse_h5]
 +
|-
 +
| RK3328 || [https://github.com/friendlyarm/sd-fuse_rk3328 sd-fuse_rk3328]
 +
|-
 +
| RK3399 || [https://github.com/friendlyarm/sd-fuse_rk3399 sd-fuse_rk3399]
 +
|-
 +
| RK3528 || [https://github.com/friendlyarm/sd-fuse_rk3528 sd-fuse_rk3528]
 +
|-
 +
| RK3566 || [https://github.com/friendlyarm/sd-fuse_rk3566 sd-fuse_rk3566]
 +
|-
 +
| RK3568 || [https://github.com/friendlyarm/sd-fuse_rk3568 sd-fuse_rk3568]
 +
|-
 +
| RK3576 || [https://github.com/friendlyarm/sd-fuse_rk3576 sd-fuse_rk3576]
 +
|-
 +
| RK3588 || [https://github.com/friendlyarm/sd-fuse_rk3588 sd-fuse_rk3588]
 +
|-
 +
| S5P4418 || [https://github.com/friendlyarm/sd-fuse_s5p4418 sd-fuse_s5p4418]
 +
|-
 +
| S5P6818 || [https://github.com/friendlyarm/sd-fuse_s5p6818 sd-fuse_s5p6818]
 +
|}
 +
 +
=== 在EFlasher系统中连接WiFi ===
 +
写入如下内容到配置文件:/etc/wpa_supplicant/wpa_supplicant.conf,其中,SSID和PASSWORD请替换为路由器的SSID和密码:
 +
<syntaxhighlight lang="bash">
 +
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
 +
update_config=1
 +
country=CN
 +
network={
 +
  ssid="SSID"
 +
  psk="PASSWORD"
 +
  key_mgmt=WPA-PSK
 +
}
 +
</syntaxhighlight>
 +
如果WiFi路由并没有设置密码,请将key_mgmt设置为NONE, 删除psk=这一行。
 +
 +
== 更改IP地址为DHCP动态获取 ==
 +
For faster startup speed, we set the eflasher to  static ip address: 192.168.1.231, <br />
 +
<br />
 +
If you want to change to dhcp, you can modify this file:<br />
 +
/etc/network/interfaces.d/eth0<br />
 +
<br />
 +
Change the contents of this file to:<br />
 +
<syntaxhighlight lang="bash">
 +
auto eth0
 +
iface eth0 inet dhcp
 +
</syntaxhighlight>
 +
 +
== 问题与解决 ==
 +
=== 无法启动,停留在initramfs命令行 ===
 +
使用如下命令检查一下内核启动参数中的root和data参数是否指向正确的设备:
 +
<syntaxhighlight lang="bash">
 +
(initramfs) cat /proc/cmdline
 +
</syntaxhighlight>
  
系统也可以存放在U盘上。
+
==更新日志==
 +
===2024-11-12===
 +
* 优化外部设备的烧写过程
 +
* 优化TF卡读卡器的识别
 +
* 增加支持烧写系统至另一张TF卡,配置命令行参数等

Latest revision as of 06:15, 12 November 2024

English

1 eFlasher介绍

eFlasher (eMMC-flasher) 是FriendlyElec官方发布的工具,让用户能方便和轻松地将系统安装到板载的eMMC上运行,甚至可以抛开电脑,就能让你在多个系统中,选择并安装上你想要的系统。

eFlasher同时为量产提供了灵活的设置选项,以方便工厂量产时安装定制系统。

eFlasher为方便使用,提供了图形界面与命令行两个版本,为方便描述,这里为它们分别命名为: eflasher-gui 和 eflasher-console:
1) eflasher-gui: 有图形界面的eFlasher,推荐有LCD屏或者HDMI显示的用户使用,可以使用触摸屏操作,没有触摸屏时也可以使用鼠标操作,也支持VNC远程操作;
2) eflasher-console: 命令行版本的eFlasher,可在串口终端或者ssh命令行上使用;

2 eFlasher 的安装

  • 第一步: 下载包含eflasher工具的固件

到你所购买的板子相关WiKi页面,找到下载固件的章节,下载固件文件名为:XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz 的固件(其中XXXX替换为板子所在的平台型号, YYYYMMDD是该固件发布的日期),
这个固件内已经包含了所属平台的所有官方系统映象,包括最新版本的 Debian, Android 和 Ubuntu 系统 (不同的平台提供的系统有所不同);
将 XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz 下载到电脑上,在Windows下制作SD卡,还需要下载Windows下的烧写工具: win32diskimager.rar;

  • 第二步: 制作SD启动卡

将固件用7z软件解压,得到.img结尾的文件,在Windows下插入SDHC卡(限32G及以上的卡),以管理员身份运行Win32DiskImager,选择 Image File载入固件,选择你的SD卡盘符,点 Write 即开始写Image到SD卡;
如果你的电脑用的是Linux系统,你也可以用 dd 命令将解压后得到的 .img 文件直接写入SD卡完成启动卡的制作;

  • 第三步: 启动eFlasher工具

将制作好的SD卡插入开发板,上电,如你有HDMI、LCD或者USB2LCD,可以在上电之前先连接好。
部分开发板需要按住标住有“BOOT”字样的按键,才能从SD卡启动系统。

3 eFlasher系统的登录

在命令行模式下使用以下帐号登录:
用户名: root
密码: fa
如果通过ssh登录,eFlasher系统的IP地址默认为 192.168.1.231

4 启动图形界面版本的eFlasher

系统启动时,图形界面版本的eFlasher会随系统自动启动,如你有连接HDMI或者LCD,应该会看到如下所示的界面:

Eflasher-gui

点击触摸屏,或者用鼠标选择你需要烧写到eMMC的系统即可。

5 通过VNC远程控制eFlasher烧写

eFlasher支持使用VNC来远程控制,在没有LCD和HDMI屏幕的情况下,可以通过电脑上的VNC客户端来操作eFlasher。
VNC客户端属于免费软件,可以到官方去下载,多个平台的下载链接:
https://www.realvnc.com/en/connect/download/vnc/

使用方法: 由于eFlasher使用固定的IP地址:192.168.1.231,所以需要设置你的电脑IP地址为192.168.1网段的IP。
在VNC客户端创建一个新设备,在地址栏上填写: 192.168.1.231:5900,然后点击 Connect 即可。

示例:以下图片演示了在 iPhone 上通过VNC 为T3 Plus更新系统:

Eflasher-vnc.png


6 启动命令行版本的eFlasher

6.1 命令行直接安装系统

显示帮助信息:

# eflasher --help
-------------------------------------------------------
USAGE: eflasher [-i, --install <arg>]

OPTIONAL:
-i, --install <path>:  Install OS to eMMC without UI operation
-r, --restore <file>:  Restore backup file to eMMC without UI operation
-e, --exclude <files>: Ignore certain files, multiple files separated by commas
--low-format:          Low format the flash before burning
--auto-exit:           Automatically exit eflahser after burning or restoring
--disable-overlayfs:   Disable overlay filesystem
-c, --conf <arg>:      Set eflasher configuration file
-l, --list-devices:    List the supported board models
-v, --version:         Output version information
-h, --help:            Show this usage
-g, --gui:             Start eflasher gui

指定路径直接安装系统:

# eflasher -i /mnt/sdcard/friendlycore-xenial_4.14_armhf
Using config file:  "/tmp/eflasher.conf"
-------------------------------------------------------
>>friendlycore-xenial_4.14_armhf
Ready to Go with FriendlyCore,Total size: 1.10 GB,
Installing FriendlyCore ..., , ,
Finish!,Speed: 20.71 MB/s

6.2 命令行交互模式

如果板子没有连接显示设备,可以通过串口或ssh登录开发板,在命令行终端下输入命令 eflasher也可以进入eflasher的命令行交互界面,命令行交互界面如下图所示:

----------------------------------------------------------------------
  EFlasher v1.2 b190111 running on NanoPC-T4
    Doc: http://wiki.friendlyelec.com/wiki/index.php/EFlasher
    eMMC: 14.56 GB
----------------------------------------------------------------------
  # Select an OS to install:
    1) Android 8
   
  # Select your backup target device:
     tf) [*] TF card  (/dev/mmcblk0p1 - 4.27 GB free - 5.67 GB total - fuseblk)
    usb) [ ] USB disk  (<none>)
   
  # Backup eMMC flash to TF card:
    Not enough free disk space on your TF card
   
  # Restore eMMC flash from backup file:
    No backup files found
   
  # Configure automatic job:
    aui) Automatic installing (Curr:Off)
    aur) Automatic restoring (Curr:Off)
   
  # Format drive
    ftf) Format TF card back to original size
----------------------------------------------------------------------
>>> Enter an option (1/tf/usb/aui/aur/ftf) :

7 开机自动烧写指定的系统

7.1 默认已开启自动烧写

所有文件名为XXXX-eflasher-OS-YYYYMMDD.img.gz的单个OS的固件,默认情况下均开启了自动烧写,如果你不希望开机自动烧写,请使用文件名为 XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz 的固件。

7.2 配置方法

有三种途径可以进行配置:

  • 方法1:在图形界面上,选择你要烧写的系统,在Ready to Go预览界面上,在屏幕下方钩选 "Start automatically at startup" 。
  • 方法2: 将SD卡挂载到Windows电脑上,用notepad+文本编辑器在SD卡的Fat分区上新建一个名为eflasher.conf文件 (如果已存在就直接编辑即可),其内容如下:
[General]
autoStart=/mnt/sdcard/XXXXXX

其中,XXXXXX替换成SD卡中存放固件的目录名,例如H3平台的FriendlyCore系统目录名为 friendlycore-xenial_4.14_armhf。

  • 方法3: 开发板运行状态下,通过串口终端,用vi编辑文件:/mnt/sdcard/eflasher.conf,文件不存在就新增一个,内容同上面的方法2。

7.3 自动烧写的进度指示

上电开机时,板上的状态灯先是呈呼吸灯状态,开机烧写固件时状态灯会快闪,烧写完成后变成慢闪,并一直停留在慢闪状态。
状态灯通常为蓝灯,某些平台板子可能会是其他颜色。
也可以利用 LCD2USB 模块,或者LCD和HDMI屏幕,得到可视化的进度指示。

8 烧写或恢复系统完成后做些其他事情

在量产时,你可能会希望在烧写系统完成后做一些额外的事情,比如点亮某个LED,你可以修改 /opt/run-eflasher.sh 脚本,在 "./eflasher-gui" 开头这一行的后面加入代码,例如下面的示例,在烧写完成后,设置某个GPIO针脚:

./eflasher-gui -qws >/dev/null 2>&1
echo 13 > /sys/class/gpio/export 
echo out > /sys/class/gpio/gpio13/direction 
echo 0 > /sys/class/gpio/gpio13/value
echo 13 > /sys/class/gpio/unexport

以下脚本则演示在S5P4418/S5P6818平台上, 烧写系统后, 将cpu id写入到eMMC系统的 /etc/cpuid.txt 文件中:

./eflasher-gui -qws >/dev/null 2>&1
partprobe /dev/mmcblk1
mount /dev/mmcblk1p2 /media/
cat /sys/devices/platform/cpu/uuid > /media/etc/cpuid.txt
umount /media/

要让上面的脚本正常运作,我们还需要设置让 eflasher-gui 在烧写完成后自动退出,需要做以下设置:
用notepad+文本编辑器在SD卡的Fat分区上编辑并新建一个名为eflasher.conf文件,将AutoExit字段设置为True:

[General]
autoStart=/mnt/sdcard/friendlycore-xenial
autoExit=true

autoStart字段则是指定开机自动烧写指定的系统而无需交互, 如果没有连接屏幕, 可以通过 LED 烧来识别烧写状态, 默认情况下, 绿色LED快闪表示正在烧写.

9 eMMC Flash的备份和恢复

这个功能类拟于电脑上面的 ghost 软件,可以将整个 eMMC Flash 的数据备份到 U盘 或 移动硬盘,或者从 U盘 恢复系统到 eMMC Flash,恢复系统时,可以恢复到 同一个开发板,也可以恢复到 同型号同规格的其他开发板。

为产品量产提供的便利
在一块开发板上做好定制,比如预装好软件和设置,然后备份一份出来,恢复到其他开发板上,以达到量产的目的,由于是对eMMC Flash进行祼读和祼写,所以支持包括 Android和Linux 在内的所有系统及数据。

功能要求:
此功能要求你有一个容易大过 eMMC Flash 大小的U盘,或者移动硬盘,并且里面没有重要的数据,最好事先格式化为exFat或者ntfs格式,在必要时,EFlasher可能会对你磁盘进行重新分区及格式化 (会事先询问)。

9.1 图形界面上执行备份和恢复

在 EFlasher 界面上点击 Backup and Restore 进入备份菜单,根据提示操作即可,如下图所示:

eflasher_index


9.1.1 选择备份文件的存储位置

可以将备份文件放在 TF 卡,或者USB存储设备。

9.1.1.1 备份到TF卡
eflasher_backup_tf

你的TF卡的大小应该大于或等于两倍的eMMC大小,例如eMMC是8G,则你应该准备一张16G的TF card。
默认情况下,8G以上的 TF 卡在 eFlasher 系统下并没有利用上所有的空间,需要做一次格式化,请点击界面上的 "Format TF card back to original size" 按钮进行格式化。

  • 点击 "Backup eMMC Flash" 按钮开始备份整个 eMMC 的所有数据;
  • 点击 "Restore eMMC Flash from backup file" 按钮开始恢复数据到 eMMC;
9.1.1.2 备份到USB存储设备
eflasher_backup_udisk

USB存储设备最好是 ext4/exfat/ntfs 格式的,如果不是,可以点击界面上的 "Re-layout and format USB Drive" 按钮对USB存储设备进行一次格式化,注意,此操作会丢失所有数据。

  • 点击 "Backup eMMC Flash" 按钮开始备份整个 eMMC 的所有数据;
  • 点击 "Restore eMMC Flash from backup file" 按钮开始恢复数据到 eMMC;
9.1.1.3 开始备份

点击 "Backup eMMC Flash" 按钮, 选择备份文件 (扩展名为.raw) 的保存路径,然后开始备份,如下图所示:

eflasher_backup
9.1.1.4 开始恢复

点击 "Restore eMMC Flash from backup file" 按钮, 选择raw文件后开始恢复数据到 eMMC,如下图所示:

eflasher_restore

9.2 命令行进行备份和恢复

在命令行终端执行以下命令启动命令行EFlasher,命令行终端可以是ssh或者串口终端:

# eflasher

然后你会看到如下功能菜单项:

----------------------------------------------------------------------
  EFlasher v1.2 b190111 running on NanoPC-T4
    Doc: http://wiki.friendlyelec.com/wiki/index.php/EFlasher
    eMMC: 14.56 GB
----------------------------------------------------------------------
  # Select an OS to install:
    1) Android 8
   
  # Select your backup target device:
     tf) [*] TF card  (/dev/mmcblk0p1 - 4.27 GB free - 5.67 GB total - fuseblk)
    usb) [ ] USB disk  (<none>)
   
  # Backup eMMC flash to TF card:
    Not enough free disk space on your TF card
   
  # Restore eMMC flash from backup file:
    No backup files found
   
  # Configure automatic job:
    aui) Automatic installing (Curr:Off)
    aur) Automatic restoring (Curr:Off)
   
  # Format drive
    ftf) Format TF card back to original size
----------------------------------------------------------------------
>>> Enter an option (1/tf/usb/aui/aur/ftf) :

9.2.1 选择备份文件的存储位置

可以将备份文件放在 TF 卡,或者USB存储设备,用 tf 和 usb 命令进行切换。

9.2.1.1 备份到TF卡

你的TF卡的大小应该大于或等于两倍的eMMC大小,例如eMMC是8G,则你应该准备一张16G的TF card。
默认情况下,8G以上的 TF 卡在 eFlasher 系统下并没有利用上所有的空间,需要做一次格式化,使用菜单上的 ftf 命令即可。

9.2.1.2 备份到USB存储设备

USB存储设备最好是 ext4/exfat/ntfs 格式的,如果不是,可以使用菜单上的 ftf 对USB存储设备进行一次格式化,注意,此操作会丢失所有数据。

9.2.1.3 开始备份

根椐菜单项前面插号的指示, 输入bk并按回车启动备份,在命令行模式下,EFlasher会立即开始备份,存储为扩展名为raw的文件,如下图所示:

----------------------------------------------------------------------
  Backing up eMMC to /mnt/udisk/nanopc-t3-emmc.raw
----------------------------------------------------------------------
  Speed: 15.01 MB/s
  Remaining Time: 00:12:53
  [===========_______________________________________]  22%
----------------------------------------------------------------------
  >>>If you want to cancel, input "c" then press <Enter> key.

9.3 扩展功能

EFlasher允许你编写一些 Linux shell 脚本,来对 eMMC 的 boot分区或者根文件系统分区进行内容更改,比如:
1)增加个性化的开机LOGO
2)为板子分配静态的IP地址,或者MAC地址
3)通过网络更新数据,软件
4) 等等
EFlasher在完成对 eMMC 的恢复操作之后,自动执行你的脚本。
你的脚本需要放在一个单独的目录下,这个目录需要与备份文件同级,目录名称的命令规则是: 备份文件名+.d,例如 备份文件名是 xxxx.raw,则脚本目录名应为 xxxx.raw.d。
EFlasher 在默认情况下,会为你的备份文件生成一个清理脚本,其作用是对文件系统做一些常规的清理工作,例如清理 tmp 目录下的临时文件、var目录下的log等等。
你可以通过参考 EFlasher 生成的清理脚本来了解应该如何访问 eMMC 的boot分区和根分区。

root@NanoPC-T3:/mnt/udisk/nanopc-t3-emmc.raw.d# tree
.
|-- cleanup.sh
`-- README.txt
 
0 directories, 2 files
root@NanoPC-T3:/mnt/udisk/nanopc-t3-emmc.raw.d#

(注: 使用开机自动还原功能时,此特性不起作用)

9.4 开机自动恢复指定的备份

有三种途径可以进行配置:

  • 方法1:在图形界面上,进入Backup and restore界面,先选择备份文件所在的存储设备,可选择TF card或者USB disk,选择 Turn on "Automatic restoring" ,然后选择要恢复的文件即可。
  • 方法2: 将存放有备份文件的设备(TF卡或U盘)挂载到电脑上,用notepad+文本编辑器在根目录新建一个名为eflasher.conf文件 (如果已存在就直接编辑即可),示例内容如下:
[General]
autoStart=/mnt/sdcard/nanopct3-backup-20190101.raw

其中,/mnt/sdcard/代表TF card,/mnt/udisk代表USB磁盘.

  • 方法3: 开发板运行状态下,通过串口终端,如果备份文件位于TF卡,用vi编辑文件:/mnt/sdcard/eflasher.conf, 如果备份文件位于 USB存储设备,用vi编辑文件:/mnt/udisk/eflasher.conf,文件不存在就新增一个,内容同上面的方法2。

10 安装系统到M.2或USB硬盘(仅适用于rockchip平台)

10.1 使用eMMC引导

eFlasher支持将引导和系统分别安装到不同存储设备,但是由于CPU不支持直接从M.2和USB设备引导,所以虽然系统可以安装到M.2和USB设备,但是引导仍然需要安装到eMMC或者TF卡。

  • 在eFlasher界面上 选择从eMMC引导:

Eflasher-select-boot-device.png

  • 在eFlasher界面上, 选择将rootfs安装到NVMe硬盘:

Eflasher-select-system-device.png
系统安装完成后,两个存储设备的分区布局如下所示:

  • eMMC分区布局
# parted -s /dev/mmcblk2 unit MiB print
Number  Start    End      Size     File system  Name      Flags
 1      8.00MiB  12.0MiB  4.00MiB               uboot
 2      12.0MiB  16.0MiB  4.00MiB               misc
 3      16.0MiB  20.0MiB  4.00MiB               dtbo
 4      20.0MiB  36.0MiB  16.0MiB               resource
 5      36.0MiB  76.0MiB  40.0MiB               kernel
 6      76.0MiB  108MiB   32.0MiB               boot
 7      108MiB   140MiB   32.0MiB               recovery
  • M.2硬盘布局
# parted -s /dev/nvme0n1 unit MiB print
Number  Start    End        Size       File system  Name      Flags
 1      8.00MiB  4616MiB    4608MiB    ext4         rootfs
 2      4616MiB  238475MiB  233859MiB  ext4         userdata

10.2 使用TF卡引导

如果开发板没有eMMC,可以使用TF来引导,不过你需要准备2张TF卡,一张用来运行eFlasher系统,另一个用来安装系统。
操作与上一个章节使用eMMC引导的方法基本相同,不同之处是, 需要将TF卡通过USB读卡器插入开发板的USB端口,然后在选择引导设备菜单中选择它。

10.3 挂载硬盘上已有的文件系统(btrfs格式)

本章节仅仅是为了演示一种更灵活的系统安装方法,在电脑上预先准备好硬盘上的文件系统。
好处是可以灵活选择文件系统的格式,比如官方使用OverlayFS+Ext4, 你可以选择使用 Btrfs 作为文件系统格式。
也可以通过UUID来挂载根文件系统,自由设置挂载参数等,下面将展示具体步骤。

  • 使用fdisk给硬盘分区 (假设设备名为/dev/sdX)
sudo fdisk /dev/sdX

创建分区:

Command (m for help): g
Created a new GPT disklabel (GUID: 3D6A24F1-9077-4587-9A01-66A7149F236F).
 
Command (m for help): n
Partition number (1-128, default 1):
First sector (2048-976773134, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-976773134, default 976773119):
 
Created a new partition 1 of type 'Linux filesystem' and of size 465.8 GiB.
 
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
  • 格式化为Btrfs
sudo mkfs.btrfs -f /dev/sdX1
  • 查看uuid
$ sudo blkid | grep /dev/sdX1
/dev/sdX1: UUID="78e066a3-3c2b-47b2-9404-ed6d9463f1b2" UUID_SUB="9fd08169-d6e9-47d2-b247-56ef5a8899d9" BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="3b89b71b-f8a0-4428-a2c6-1aa516ce065d"
  • 挂载硬盘
sudo mount /dev/sdX1 /mnt/usb500g
  • 下载官方rootfs包,这里用debian core举例,在网盘的06_开头的目录中可找到压缩包
06_File\ systems/rootfs-debian-bookworm-core-arm64.tgz
  • 解压rootfs到硬盘
sudo tar xvzfp /tmp/rootfs-debian-bookworm-core-arm64.tgz --strip-components 2 -C /mnt/usb500g --numeric-owner --same-owner
  • 卸载硬盘
sudo umount /mnt/usb500g
  • 修改eFlasher烧写卡中的命令行参数

在电脑上挂载eflasher烧写卡的第一个分区到/mnt/sdcard,然后编辑info.conf

vi /mnt/sdcard/debian-bookworm-core-arm64/info.conf

在info.conf中增加如下内容, 指示内核通过UUID挂载Linux文件系统,取消userdata分区(即不使用OverlayFS), 由于我的硬盘不支持discard特性,因此还指定了nodiscard参数:

bootargs-ext=root=PARTUUID=3b89b71b-f8a0-4428-a2c6-1aa516ce065d data= rootflags=nodiscard
  • 将eFlasher烧写卡插入开发板,开机,选择Boot设备为eMMC,而System设备则选择"Skip Flashing",进行烧写即可:

Eflasher-noflashing-system.png

10.4 制作使用Btrfs的固件

方法是用sd-fuse_rkXXXX仓库里的build-rootfs-img.sh打包rootfs.img时传入FS_TYPE=btrfs的参数,例如:

sudo -E FS_TYPE=btrfs ./build-rootfs-img.sh ubuntu-focal-desktop-arm64/rootfs ubuntu-focal-desktop-arm64

完整的脚本请参考 https://github.com/friendlyarm/sd-fuse_rk3588/blob/kernel-6.1.y/test/test-btrfs-rootfs.sh

11 针对量产用户的定制选项

11.1 EFlasher对系统映象的管理

EFlasher会从SD卡的Fat分区读取系统映象文件,将SD卡插入Windows的电脑,你可以直接管理这些映象文件。
在SD卡的Fat分区,根目录下的每一个子目录,代表一个OS,目录名称可随意命令(但不能是中文),
如果SD卡的Fat分区空间不够用,你也可以在一个U盘中存放这些系统文件,目录结构与SD卡的相同。

例如Fat分区有下面4个目录:
Eflasher-folder
对应以下4个可安装的系统:
Eflasher-oslist

每个目录下的文件,分别说明如下:
烧写配置文件:

env.conf 用于设置uboot环境变量,内核启动参数
info.conf 用于个性化烧写程序界面上的名称、图标以及定义该系统所属的硬件平台,示例说明:

title=Android 5 ---> 系统名称显示为Android5
require-board=s5p4418 ---> 所属平台 s5p4418, 可选的值还有 s5p6818, h3, a64 等
version=2016-11-17 ---> 该rom的版本 (或制作的日期)
icon=androidos.png ---> 图标
上面的定义对应的显示所下:
Eflasher-infoconf

系统映象文件, 不同的系统可能不同:

2ndboot.bin Second Boot
boot.img boot分区映象文件
bootloader U-Boot
cache.img Android Cache分区映象
system.img 系统分区的映象
userdata.img 数据分区的映象
partmap.txt 分区描述文件

以上映象文件默认已经预装在eFlasher的固件中,不过你也可以到指定板子的下载地址下载它们,进入官方的下载地址指向的网盘目录,这些系统映象放在一个名为 images-for-eflasher 的目录下,以下是S5P6818开发板的网盘目录:

EImages-for-eflasher.png

可以下载这个目录下的文件然后解压到SD卡的Fat分区或者U盘即可。

11.2 设置内核启动参数 (仅支持rockchip平台)

编辑OS目录下的info.conf配置文件, 增加bootargs-ext参数,设置要追加内核启动参数,例如,增加参数,让内核锁定使用的分辨率不超过2048的宽度:

bootargs-ext=rockchipdrm.fb_max_sz=2048

如果要删除某个已经指定的参数,可以设置为空,例如删除userdata参数:

bootargs-ext=userdata=

要在制作量产卡的过程中设置好内核启动参数,可参考如下脚本: https://github.com/friendlyarm/sd-fuse_rk3588/blob/kernel-6.1.y/test/test-custom-bootargs.sh

11.3 制作自已的量产Eflasher烧写卡

请访问CPU型号右边的链接,在README_cn.md文件中搜索关键字"备份文件系统并创建SD映像", 或者在README.md文件中搜索关键字"Backup rootfs and create custom SD image"。

CPU Link
H3 sd-fuse_h3
H5 sd-fuse_h5
RK3328 sd-fuse_rk3328
RK3399 sd-fuse_rk3399
RK3528 sd-fuse_rk3528
RK3566 sd-fuse_rk3566
RK3568 sd-fuse_rk3568
RK3576 sd-fuse_rk3576
RK3588 sd-fuse_rk3588
S5P4418 sd-fuse_s5p4418
S5P6818 sd-fuse_s5p6818

11.4 在EFlasher系统中连接WiFi

写入如下内容到配置文件:/etc/wpa_supplicant/wpa_supplicant.conf,其中,SSID和PASSWORD请替换为路由器的SSID和密码:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN
network={
  ssid="SSID"
  psk="PASSWORD"
  key_mgmt=WPA-PSK
}

如果WiFi路由并没有设置密码,请将key_mgmt设置为NONE, 删除psk=这一行。

12 更改IP地址为DHCP动态获取

For faster startup speed, we set the eflasher to static ip address: 192.168.1.231,

If you want to change to dhcp, you can modify this file:
/etc/network/interfaces.d/eth0

Change the contents of this file to:

auto eth0
iface eth0 inet dhcp

13 问题与解决

13.1 无法启动,停留在initramfs命令行

使用如下命令检查一下内核启动参数中的root和data参数是否指向正确的设备:

(initramfs) cat /proc/cmdline

14 更新日志

14.1 2024-11-12

  • 优化外部设备的烧写过程
  • 优化TF卡读卡器的识别
  • 增加支持烧写系统至另一张TF卡,配置命令行参数等