Firefly开源社区

12
发表新贴

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

186

积分

1

威望

0

贡献

技术小白

积分
186
发表于 2018-5-29 15:55:28     
RK3328SD卡统一固件制作
本文适用于fireflyRK3328开发板。我的操作系统是ubuntu16.04x64win7x64。建议使用ubuntu14.04 x64ubuntu16.04 在设置开发环境时,部分包找不到,需要自行添加[url=]更新源[/url][M1]
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.编译kerneluboot
         $ ./build/mk-kernel.sh roc-rk3328-cc
编译后生成boot.img 、Image 、rk3328-roc-cc.dtb
         $ ./build/mk-uboot.sh roc-rk3328-cc
         编译后生成 idbloader.imgtrust.imguboot.imgrk3328_loader_ddr786_v1.06.243.bin
现在,kerneluboot所需的文件都会自动拷贝到out目录下,它将在步骤6中使用。

5.制作ubuntu16.04rootfs
    1>首先,请下载ubuntu的最低内核
        $ wget –c http://cdimage.ubuntu.com/ubuntu ... 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卡中

[M1]# 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-srchttp://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe#Added by software-properties
deb-src http://mirrors.aliyun.com/ubuntu/xenial-updates main restricted multiverse universe #Added bysoftware-properties
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
deb-srchttp://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverseuniverse #Added by software-properties
#debhttp://us.archive.ubuntu.com/ubuntu trusty main universe




回复

使用道具 举报

4万

积分

19

威望

22

贡献

神级创客

Rank: 8Rank: 8

积分
40258
发表于 2018-5-29 17:46:40     
wonderful job!!
回复

使用道具 举报

186

积分

1

威望

0

贡献

技术小白

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

使用道具 举报

58

积分

0

威望

0

贡献

技术小白

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

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

使用道具 举报

186

积分

1

威望

0

贡献

技术小白

积分
186
发表于 2018-6-4 09:25:59     
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
脚本内容如上,红色部分看实际情况更改
回复

使用道具 举报

20

积分

0

威望

0

贡献

技术小白

积分
20
发表于 2018-6-11 12:50:59     
→_→ 发表于 2018-6-4 09:25
#!/bin/bash

clean_first_boot () {

感谢
回复

使用道具 举报

12

积分

0

威望

0

贡献

游客

积分
12
发表于 2018-6-15 16:53:26     
楼主用到的这些脚本是否方便分享下
回复

使用道具 举报

186

积分

1

威望

0

贡献

技术小白

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

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

使用道具 举报

58

积分

0

威望

0

贡献

技术小白

积分
58
发表于 2018-6-19 10:48:52     
→_→ 发表于 2018-6-4 09:25
#!/bin/bash

clean_first_boot () {

多谢楼主
回复

使用道具 举报

58

积分

0

威望

0

贡献

技术小白

积分
58
发表于 2018-6-19 10:49:09     
→_→ 发表于 2018-6-4 09:25
#!/bin/bash

clean_first_boot () {

多谢楼主,多谢楼主
回复

使用道具 举报

返回列表
12
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表