ROC-RK3328-CC的SD卡固件制作总结

RK3328SD卡统一固件制作

本文适用于firefly的RK3328开发板。我的操作系统是ubuntu16.04x64和win7x64。建议使用ubuntu14.04 x64,ubuntu16.04 在设置开发环境时,部分包找不到,需要自行添加[url=]更新源[/url][[M1]](file:///C:/Users/Administrator/Desktop/ubuntu16.04%E5%88%B6%E4%BD%9C/ubuntu16.04%E5%88%B6%E4%BD%9C%20-%20%E5%89%AF%E6%9C%AC.docx#_msocom_1)

1.设置开发环境
$sudo apt-get installgit repo gnupg flex bison gperf build-essential zip tar curl libc6-devlibncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386libgl1-mesa-glx:i386 libgl1-mesa-dev g+±multilib cmake tofrodospython-markdown libxml2-utils xsltproc zlib1g-dev:i386 lzop qemu-user-static

  $sudoln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

2.安装ARM交叉编译工具链和编译内核相关的软件包

$ sudo apt-get install gcc-5-aarch64-linux-gnu gcc-5-arm-linux-gnueabihfgcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu device-tree-compiler lzoplibncurses5-dev libssl1.0.0 libssl-dev

3.解压所需文件

     $ ./unzip.sh

4.编译kernel和uboot

     $ ./build/mk-kernel.sh roc-rk3328-cc

编译后生成boot.img 、Image 、rk3328-roc-cc.dtb

     $ ./build/mk-uboot.sh roc-rk3328-cc

     编译后生成 idbloader.img、trust.img、uboot.img、rk3328_loader_ddr786_v1.06.243.bin

现在,kernel和uboot所需的文件都会自动拷贝到out目录下,它将在步骤6中使用。

5.制作ubuntu16.04的rootfs
1>首先,请下载ubuntu的最低内核
$ wget –c http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04.4-base-arm64.tar.gz

2>解压缩
    $ mkdir linux-rootfs
    $ sudo tar -xpf ubuntu-base-16.04.4-base-arm64.tar.gz-C linux-rootfs

3>安装模拟器运行根文件系统
    $ sudo apt-get install qemu-user-static
    $ sudo cp/usr/bin/qemu-aarch64-static linux-rootfs/usr/bin

4>将本地主机的DNS配置复制到rootfs
    $ sudo cp -b /etc/resolv.conflinux-rootfs/etc/resolv.conf

5>添加额外的端口ubuntu的来源,把linux-rootfs/etc/apt/sources.list备份
修改sources.list内容:

debhttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricteduniverse

debhttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricteduniverse

debhttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverserestricted universe

debhttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverserestricted universe

debhttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverserestricted universe

deb-srchttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricteduniverse

deb-srchttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverserestricted universe

deb-srchttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverserestricted universe

deb-srchttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverserestricted universe

deb-srchttp://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverserestricted universe

6>使用安装脚本文件来安装核心文件系统。请参阅文件ch-mount.sh,并添加可执行权限。
    $ sudo chmod a+x ch-mount.sh

7>挂载rootfs,注意不要以管理员身份执行脚本,否则会发生错误。
    $ ./ch-mount.sh -m linux-rootfs/

    现在,您将以root身份进入ubuntu16.04rootfs,并运行模拟bash,您可以安装任何要整合的软件包。

a) 先更新下载源

#apt-get update

b) 解决perl的警告和中文乱码

# apt-getinstall language-pack-zh-hans

#locale-gen en_US.UTF-8

c) 安装网络工具以使ifconfig命令正常工作。

#apt-get install net-tools inetutils-ping

d) 安装一些基本工具

#apt-get install vim openssh-server gdisk parted curlbzip2 libasound2-dev

e) 启用自动连接网络

#echo auto eth0> /etc/network/interfaces.d/eth0

#echo iface eth0 inet dhcp >>/etc/network/interfaces.d/eth0

f) 或者静态IP

#vi /etc/network/interfaces.d/eth0

添加内容:

auto eth0
iface eth0 inet static
address 192.168.0.122
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameserver 114.114.114.114

g) 设置用户名和密码登录

#useradd -s’/bin/bash’ -m -G adm,sudo gtel

#passwd gtel

#passwd root

h) 修改ssh-server的root登录

#vi etc/ssh/sshd_config

PermitRootLogin prohibit-password改为yes

#PasswordAuthenticationyes去掉#

i) 修改串口调试root登录

#vi lib/systemd/system/serial-getty@.service

修改为ExecStart=-/sbin/agetty–keep-baud -a root 115200,38400,9600 %I $TERM

j) 清除下载的软件包

#apt-get autoclean

#apt-get clean

k) 添加启动脚本

#vi /etc/rc.local

在exit 0前添加/usr/local/bin/first-boot-recovery.sh启动脚本,给予可执行权限,用来扩容根目录,记得在根目录下新建一个firstboot文件

l) 退出模拟bash

#exit

文件系统的基本安装已完成,可以根据自己需要进行客制化,下面是制作完成后烧入到板子上可能出现的问题

8>在rootfs中安装后,请卸载rootfs:
$./ch- mount.sh -u linux-rootfs/

9>制作文件系统镜像

     $ ./mk-image.sh

10>现在,rootfs完成了。linux-rootfs.img将在步骤6中使用。

6.制作一个统一固件

$ ./build/mk-image.sh-c rk3328 -t system -r out/linux-rootfs.img

7. 烧写到SD卡。

Linux
将SD卡插入到电脑中并格式化,假设 /dev/sdb 为 SD卡设备,运行下面指令,将以上生成的统一固件 system.img 写入到 SD 卡中:

$ ./build/flash_tool.sh -c rk3328 -d /dev/sdb -p system -i out/system.img

windows:

 将SD卡插入到电脑中并格式化,使用Win32DiskImage工具将统一固件system.img烧写到SD卡中

[hr] [[M1]](file:///C:/Users/Administrator/Desktop/ubuntu16.04%E5%88%B6%E4%BD%9C/ubuntu16.04%E5%88%B6%E4%BD%9C%20-%20%E5%89%AF%E6%9C%AC.docx#_msoanchor_1)# deb cdrom:[Ubuntu 16.04 LTS Xenial Xerus - Release amd64(20160420.1)]/ xenial main restricted

deb-srchttp://archive.ubuntu.com/ubuntu xenial main restricted #Added bysoftware-properties

deb http://mirrors.aliyun.com/ubuntu/xenial main restricted

deb-srchttp://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe#Added by software-properties

deb http://mirrors.aliyun.com/ubuntu/xenial-updates main restricted

deb-src http://mirrors.aliyun.com/ubuntu/xenial-updates main restricted multiverse universe #Added bysoftware-properties

deb http://mirrors.aliyun.com/ubuntu/xenial universe

deb http://mirrors.aliyun.com/ubuntu/xenial-updates universe

deb http://mirrors.aliyun.com/ubuntu/xenial multiverse

deb http://mirrors.aliyun.com/ubuntu/xenial-updates multiverse

deb http://mirrors.aliyun.com/ubuntu/xenial-backports main restricted universe multiverse

deb-srchttp://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse#Added by software-properties

debhttp://archive.canonical.com/ubuntu xenial partner

deb-srchttp://archive.canonical.com/ubuntu xenial partner

deb http://mirrors.aliyun.com/ubuntu/xenial-security main restricted

deb-srchttp://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverseuniverse #Added by software-properties

deb http://mirrors.aliyun.com/ubuntu/xenial-security universe

deb http://mirrors.aliyun.com/ubuntu/xenial-security multiverse

#debhttp://us.archive.ubuntu.com/ubuntu trusty main universe

大家注意下,我之前没有在ubuntu14的环境下试过制作arm64的文件系统,做的是armhf的。后面做arm64的时候我重新搭了个ubuntu16的环境,文章中说的最好在ubuntu14环境下制作,是我的失误,请大家谅解。本人昨天在ubuntu14环境下测试时,发现安装ssh有问题,但在ubuntu16环境下能很好的制作。

拜谢楼主的文,请问是否可以把这部分讲的再清楚些,包括脚本内容。没有找到相关文档

#vi /etc/rc.local
在exit 0前添加/usr/local/bin/first-boot-recovery.sh启动脚本,给予可执行权限,用来扩容根目录,记得在根目录下新建一个firstboot文件

andygaof 发表于 2018-6-4 01:06
拜谢楼主的文,请问是否可以把这部分讲的再清楚些,包括脚本内容。没有找到相关文档

#vi /etc/rc.local

#!/bin/bash

clean_first_boot () {
rm -f /firstboot 2>/dev/null
sync
}

if [ -e /firstboot ]; then
echo “======Expanding the rootfs…”
parted /dev/mmcblk0 – unit s resizepart 5 -34s
e2fsck -f /dev/mmcblk0p5
resize2fs /dev/mmcblk0p5
clean_first_boot
fi
脚本内容如上,红色部分看实际情况更改

→_→ 发表于 2018-6-4 09:25
#!/bin/bash

clean_first_boot () {

感谢

楼主用到的这些脚本是否方便分享下

我一米八 发表于 2018-6-15 16:53
楼主用到的这些脚本是否方便分享下

除了解压和扩容的脚本是自己编写的,其余的你区官网下载3328的build文件里会有

→_→ 发表于 2018-6-4 09:25
#!/bin/bash

clean_first_boot () {

多谢楼主

→_→ 发表于 2018-6-4 09:25
#!/bin/bash

clean_first_boot () {

多谢楼主,多谢楼主

→_→ 发表于 2018-6-4 09:25
#!/bin/bash

clean_first_boot () {

多谢

想感谢楼主,回复不了。只好这里敲了

看到这里,我想了想,安卓系统做个sd卡启动系统应该没这么麻烦。
在aio3399的安卓RKTools目录就有windows上的sd卡启动制作工具,SD_Firmware_Tool,放到windows上就可以用。

学生程序员 发表于 2018-7-3 10:28
看到这里,我想了想,安卓系统做个sd卡启动系统应该没这么麻烦。
在aio3399的安卓RKTools目录就有windows …

没试过做Android的固件

求怎样让系统从硬盘启动,而且把系统烧录进固态硬盘后,有一大块空闲分区怎么才能把空闲分区弄出来

我的电脑 发表于 2018-7-28 09:30
求怎样让系统从硬盘启动,而且把系统烧录进固态硬盘后,有一大块空闲分区怎么才能把空闲分区弄出来

没弄过硬盘和固态硬盘,爱莫能助

我的电脑 发表于 2018-7-28 09:30
求怎样让系统从硬盘启动,而且把系统烧录进固态硬盘后,有一大块空闲分区怎么才能把空闲分区弄出来

老哥我也想从硬盘启动,瑞芯的wiki上有不过我硬件知识太辣鸡招架不了,你弄出来和我说一下好不,我想做服务器用奈何硬件弄不了
http://opensource.rock-chips.com/wiki_Boot_option

我的电脑 发表于 2018-7-28 09:30
求怎样让系统从硬盘启动,而且把系统烧录进固态硬盘后,有一大块空闲分区怎么才能把空闲分区弄出来

空闲是根本没从硬盘启动的原因,sd卡启动之后你看一下也是一大块空闲,rootfs只有2.3G左右,当系统启动一次自动扩展到容量大小了。

本帖最后由 肯定是疯了. 于 2018-8-8 15:59 编辑

楼主能把编译好的img还没制作成统一固件的文件还有工程发我一下吗,压缩一下放云盘就好,谢谢了,我自己这边编译老是出错我是学软件的硬件浪费时间感觉太麻烦了。

你好, 我的uboot起不来是怎么回事呢?
log显示 DRAM的大小都读取不到?
DDR version 1.06 20170424
In
DDR3
786MHz
Bus Width=32 Col=10 Bank=8 Row=15/15 CS=2 Die Bus-Width=16 Size=2048MB
ddrconfig:6
OUT
Boot1 Release Time: 2017-05-18, version: 2.43
ChipType = 0x11, 125
SdmmcInit=2 0
BootCapSize=2000
UserCapSize=14910MB
FwPartOffset=2000 , 2000
SdmmcInit=0 2
StorageInit ok = 20770
Raw SecureMode = 0
SecureInit read PBA: 0x4
SecureInit read PBA: 0x404
SecureInit read PBA: 0x804
SecureInit read PBA: 0xc04
SecureInit read PBA: 0x1004
SecureInit ret = 0, SecureMode = 0
LoadTrustBL
No find bl30.bin
No find bl32.bin
Load uboot, ReadLba = 2000
Load OK, addr=0x200000, size=0xa7fec
RunBL31 0x10000
NOTICE: BL31: v1.3(debug):f947c7e
NOTICE: BL31: Built : 09:28:45, May 31 2017
NOTICE: BL31:Rockchip release version: v1.3
INFO: ARM GICv2 driver initialized
INFO: Using opteed sec cpu_context!
INFO: boot cpu mask: 1
INFO: plat_rockchip_pmu_init: pd status 0xe
INFO: BL31: Initializing runtime services
WARNING: No OPTEE provided by BL2 boot loader, Booting device without OPTEE initialization. SMC`s destined for OPTEE will return SMC_UNK
ERROR: Error initializing runtime service opteed_fast
INFO: BL31: Preparing for EL3 exit to normal world
INFO: Entry point address = 0x200000
INFO: SPSR = 0x3c9

U-Boot 2017.09-gc58a816-dirty (Oct 19 2018 - 00:39:34 +0800)

Model: Firefly ROC-RK3328-CC
DRAM: