Difference between revisions of "EFlasher/zh"
(→EFlasher对系统映象的管理) |
(updated by API) |
||
(129 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
− | + | [[EFlasher|English]] | |
− | eFlasher (eMMC-flasher) | + | == eFlasher介绍 == |
+ | eFlasher (eMMC-flasher) 是FriendlyElec官方发布的工具,让用户能方便和轻松地将系统安装到板载的eMMC上运行,甚至可以抛开电脑,就能让你在多个系统中,选择并安装上你想要的系统。 | ||
<br /><br /> | <br /><br /> | ||
eFlasher同时为量产提供了灵活的设置选项,以方便工厂量产时安装定制系统。 <br /> | eFlasher同时为量产提供了灵活的设置选项,以方便工厂量产时安装定制系统。 <br /> | ||
<br /> | <br /> | ||
eFlasher为方便使用,提供了图形界面与命令行两个版本,为方便描述,这里为它们分别命名为: eflasher-gui 和 eflasher-console:<br /> | eFlasher为方便使用,提供了图形界面与命令行两个版本,为方便描述,这里为它们分别命名为: eflasher-gui 和 eflasher-console:<br /> | ||
− | 1) eflasher-gui: | + | 1) eflasher-gui: 有图形界面的eFlasher,推荐有LCD屏或者HDMI显示的用户使用,可以使用触摸屏操作,没有触摸屏时也可以使用鼠标操作,也支持VNC远程操作;<br /> |
2) eflasher-console: 命令行版本的eFlasher,可在串口终端或者ssh命令行上使用;<br /> | 2) eflasher-console: 命令行版本的eFlasher,可在串口终端或者ssh命令行上使用;<br /> | ||
<br /> | <br /> | ||
Line 13: | Line 14: | ||
* 第一步: 下载包含eflasher工具的固件 <br /> | * 第一步: 下载包含eflasher工具的固件 <br /> | ||
− | 到你所购买的板子相关WiKi页面,找到下载固件的章节,下载固件文件名为:XXXX-eflasher-YYYYMMDD- | + | 到你所购买的板子相关WiKi页面,找到下载固件的章节,下载固件文件名为:XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz 的固件(其中XXXX替换为板子所在的平台型号, YYYYMMDD是该固件发布的日期), <br /> |
− | 这个固件内已经包含了所属平台的所有官方系统映象,包括最新版本的 Debian, | + | 这个固件内已经包含了所属平台的所有官方系统映象,包括最新版本的 Debian, Android 和 Ubuntu 系统 (不同的平台提供的系统有所不同);<br /> |
− | 将 XXXX-eflasher-YYYYMMDD- | + | 将 XXXX-eflasher-multiple-os-YYYYMMDD-30g.img.gz 下载到电脑上,在Windows下制作SD卡,还需要下载Windows下的烧写工具: win32diskimager.rar;<br /> |
− | * 第二步: | + | * 第二步: 制作SD启动卡 <br /> |
− | 将固件用7z软件解压,得到. | + | 将固件用7z软件解压,得到.img结尾的文件,在Windows下插入SDHC卡(限32G及以上的卡),以管理员身份运行Win32DiskImager,选择 Image File载入固件,选择你的SD卡盘符,点 Write 即开始写Image到SD卡;<br /> |
如果你的电脑用的是Linux系统,你也可以用 dd 命令将解压后得到的 .img 文件直接写入SD卡完成启动卡的制作;<br /> | 如果你的电脑用的是Linux系统,你也可以用 dd 命令将解压后得到的 .img 文件直接写入SD卡完成启动卡的制作;<br /> | ||
* 第三步: 启动eFlasher工具 | * 第三步: 启动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 == | ||
Line 28: | Line 35: | ||
点击触摸屏,或者用鼠标选择你需要烧写到eMMC的系统即可。<br /> | 点击触摸屏,或者用鼠标选择你需要烧写到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 == | == 启动命令行版本的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 /> | 如果板子没有连接显示设备,可以通过串口或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 /> | <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 /> | EFlasher会从SD卡的Fat分区读取系统映象文件,将SD卡插入Windows的电脑,你可以直接管理这些映象文件。<br /> | ||
在SD卡的Fat分区,根目录下的每一个子目录,代表一个OS,目录名称可随意命令(但不能是中文), <br /> | 在SD卡的Fat分区,根目录下的每一个子目录,代表一个OS,目录名称可随意命令(但不能是中文), <br /> | ||
Line 81: | Line 428: | ||
|} | |} | ||
− | 以上映象文件默认已经预装在eFlasher的固件中,不过你也可以到指定板子的下载地址下载它们,进入官方的下载地址指向的网盘目录,这些系统映象放在一个名为 images-for-eflasher | + | 以上映象文件默认已经预装在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> | ||
− | + | ==更新日志== | |
+ | ===2024-11-12=== | ||
+ | * 优化外部设备的烧写过程 | ||
+ | * 优化TF卡读卡器的识别 | ||
+ | * 增加支持烧写系统至另一张TF卡,配置命令行参数等 |
Latest revision as of 06:15, 12 November 2024
Contents
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,应该会看到如下所示的界面:
点击触摸屏,或者用鼠标选择你需要烧写到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更新系统:
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 进入备份菜单,根据提示操作即可,如下图所示:
9.1.1 选择备份文件的存储位置
可以将备份文件放在 TF 卡,或者USB存储设备。
9.1.1.1 备份到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存储设备
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) 的保存路径,然后开始备份,如下图所示:
9.1.1.4 开始恢复
点击 "Restore eMMC Flash from backup file" 按钮, 选择raw文件后开始恢复数据到 eMMC,如下图所示:
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界面上, 选择将rootfs安装到NVMe硬盘:
- 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",进行烧写即可:
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个目录:
对应以下4个可安装的系统:
每个目录下的文件,分别说明如下:
烧写配置文件:
系统映象文件, 不同的系统可能不同:
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开发板的网盘目录:
可以下载这个目录下的文件然后解压到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卡,配置命令行参数等