install Linux to RDA nand Flash

安装 linux 发行版至 RDA NAND

这篇文章基于 OrangePi 2G-IOT,教我们如何在 NAND 上面构建 linux,通过自定义的 bootloader 去启动它,烧写工具是由 Github user“aib”写的。Orange Pi 2G-IOT 采用 RDA8810 作为 soc,具备 2G 的通话功能,内置 256 DDR,512 NAND FLASH(Toshiba TC58NYG2S0H 4G 1.8V 8-bit)。

这里首先感谢 Github user “aib” 和 “txurtxil” 帮助解决这个问题。

  • 烧写Dietpi Image 至 TF 卡,并扩容分区
  • 安装mtd-utils

  • 烧写Dietpi Image 至 TF 卡,并扩容分区

镜像下载地址:

http://pan.baidu.com/s/1skUxIX3
密码:嗯e

解压得到 dietpi_OrangePi-2G-IOT_sdcard.img
准备一张 8G 的 class10 的 TF 卡,注意因为电流问题 8G 以上的 TF 卡无法启动。

$ sudo dd bs=1M if=dietpi_OrangePi-2G-IOT_sdcard.img of=/dev/sd* && sync

使用 Gparted 对 TF 卡进行分区扩容,具体步骤如下:
这里写图片描述
注意:
1.用户名 dietpi 密码 dietpi 管理员用户 root 密码 dietpi 。
2.网络配置在/boot/network下,由于/boot是fat分区,所以可以把sd卡插到电脑/手机上进行修改。
3.串口调试波特率为921600 。

  • 安装mtd-utils
$ sudo apt-get update
$ sudo apt-get install -y mtd-utils
  • 拷贝镜像本身的文件系统,并同步
    $ vim ~/nandfs/mknandfs.sh
#!/bin/bash
set -euo pipefail
set -x

SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"

SRC="$SCRIPT_DIR"
DEST_ROOT="$SCRIPT_DIR"/nandroot

rsync -a -x --delete --delete-excluded / /boot "$DEST_ROOT" -f "merge $SRC/cpfs.filter" -v
cp "$SRC"/fstab "$DEST_ROOT"/etc/fstab

$ vim ~/nandfs/cpfs.filter

 + /home/orangepi/.bash_logout
 + /home/orangepi/.bashrc
 + /home/orangepi/.profile
 + /home/orangepi/**

 + /var/backup/**
 + /var/cache/**
 + /var/lib/apt/lists/**
 + /var/log/**
 + /var/tmp/**

 + /usr/share/doc/**
 + /usr/share/man/**

 + __pycache__
 + *.pyc

$ chmod +x mknandfs.sh
$ sudo ~/nandfs/mknandfs.sh
我们可以得到 nandroot 的目录,里面是原生的文件系统

  • 需要修改/etc/fstab这个文件,和重新写 boot.scr 的启动文件
    $ vim ~/nandfs/fstab
ubi0:nandroot  /  ubifs  defaults  0 1
tmpfs /tmp  tmpfs nodev,nosuid,mode=1777  0 0	

此外我们还要修改启动参数:
$ vim /boot/boot-nand.cmd

setenv ubiargs "ubi.mtd=1"
setenv rootdev "ubi0:nandroot"
setenv rootfstype "ubifs"

setenv bootargs "${ubiargs} ${mtdparts} root=${rootdev} rootwait rootfstype=${rootfstype} console=ttyS0,921600 panic=10 consoleblank=0 loglevel=8 ${extraargs} ${extraboardargs}"

ubifsload ${initrd_addr} "/boot/uInitrd"
ubifsload ${kernel_addr} "/boot/zImage"
ubifsload ${modem_addr} "/boot/modem.bin"

mdcom_loadm ${modem_addr}
mdcom_check 1

bootz ${kernel_addr} ${initrd_addr}

用下面的命令生成 boot-nand.scr

$ sudo mkimage -C none -A arm -T script -d /boot/boot-nand.cmd /boot/boot-nand.scr

重新生成了 boot-nand.scr 和 fstab,我们需要重新执行一次 mknandfs.sh
$ sudo ~/nandfs/mknandfs.sh

  • 制作 ubi 的 镜像文件
    我们需要用 mkfs.ubifs 制作 nandroot.img 的 img 镜像文件
    $ vim ~/nandfs/mkubifs.sh
#!/bin/bash
set -euo pipefail
set -x

SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"

DEST_ROOT="$SCRIPT_DIR"/nandroot
DEST_FS_IMG="$SCRIPT_DIR"/nandroot.img
MAX_LEB=2000

mkfs.ubifs -e 248KiB -m 4096 -c $MAX_LEB -r "$DEST_ROOT" -o "$DEST_FS_IMG"

$ chmod +X /nandfs/mkubifs.sh
$ sudo ~/nandfs/mkubifs.sh
用 ubinize 去创建一个 UBI image
$ vim ubinize.ini

[nandroot-volume]
mode=ubi
image=/home/orangepi/nandfs/nandroot.img
vol_id=0
vol_name=nandroot
vol_size=480MiB
vol_type=dynamic
vol_alignment=1

$ vim ~/nandfs/mkubi.sh

#!/bin/bash
set -euo pipefail
set -x

SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"

SRC="$SCRIPT_DIR"
DEST_UBI_IMG="$SCRIPT_DIR"/ubi.img

ubinize -p 256KiB -m 4096 "$SRC"/ubinize.ini -o "$DEST_UBI_IMG"

$ sudo ~/nandfs/mkubi.sh
得到 ubi.img 这个镜像文件

  • 制作 u-boot.rda 和 pdl1.bin 和 pdl2.bin
    下载源码编译
$ git clone https://github.com/aib/u-boot-RDA8810.git
$ cd u-boot-RDA8810
$ git checkout nand-boot

编译得到 pdl.bin

$ make CROSS_COMPILE=arm-none-eabi- clean rda8810_config
$ make CROSS_COMPILE=arm-none-eabi- pdl=1 PDL

会生成 pdl1.bin 和 pdl2.bin
编译得到 u-boot.rda

$ make CROSS_COMPILE=arm-none-eabi- clean rda8810_config
$ make CROSS_COMPILE=arm-none-eabi- 
  • 使用 opi2g_nand_write.py 烧录 ubi.img 和 bootloader
    先把拨码开关拨成1234上,5678下,拨成 nand 启动,上电按住按键5S,就可以看到/dev/ttyACM0,也就是 OTG MODE。
    记住把生成的 pdl1.bin pdl2.bin u-boot.rda ubi.img,放在和opi2g_nand_write.py统计目录下
$ sudo python3 opi2g_nand_write.py -p /dev/ttyACM0 --format-flash --pdl1 pdl1.bin --pdl2 pdl2.bin bootloader:u-boot.rda nandroot:ubi.img

执行会先擦除,再烧录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值