完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
编译环境
系统:Ubuntu14.04(server版) 内核:4.4.0-142-generic 基本上与官方文档没什么特别大的出入,只有在编译Ubuntu根文件系统时有些许差异。 准备工作 硬件要求: 64 位系统,硬盘空间大于 40G。如果进行多个构建,将需要更大的硬盘空间。 软件要求:编译环境初始化
$ sudo apt-get install git gnupg flex bison gperf build-essential zip tar curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 cmake tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 lzop lib32stdc++6 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
$ sudo apt-get install gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu device-tree-compiler lzop libncurses5-dev libssl1.0.0 libssl-dev 下载LINUX-SDK:下载源码包(推荐国内用户使用) 下载repo工具: 解压文件:7z x linux-sdk-3328.7z,可通过以下命令安装7z $ sudo apt install p7zip-full 把下载好的源码包上传到创建好的linux目录下 注意:解压完之后,用户可能会疑惑看不到文件。在linux/目录运行ls -a命令,有.repo/目录,这是我们的仓库。 同步源码: # 这个命令在repo文件中有一个执行文件可使用 $ ./repo/repo sync -c 注意:从 Github 上同步 SDK 时,部分国内用户会有不稳定的现象,这就需要多次运行同步命令 repo sync -c 才可以 $ tree -L 1 . ├── app ├── buildroot buildroot根文件系统的编译目录 ├── build.sh -> device/rockchip/common/build.sh 全自动编译脚本 ├── device ├── distro ├── docs 开发文档 ├── envsetup.sh -> buildroot/build/envsetup.sh ├── external ├── kernel 内核 ├── Makefile -> buildroot/build/Makefile ├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh 打包脚本 ├── prebuilts ├── rkbin ├── rkflash.sh -> device/rockchip/common/rkflash.sh 烧写脚本 ├── rootfs ├── tools └── u-boot 编译 Ubuntu 根文件系统(Ubuntu 16.04 amd64)
$ sudo mkdir ubuntu-rootfs && cd ubuntu-rootfs $ wget -c http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.1/release/ubuntu-base-16.04.1-base-arm64.tar.gz
# 快速创建一个大文件 $ fallocate -l 1000M rootfs.img # 格式化此大文件 $ sudo mkfs.ext4 -F -L ROOTFS rootfs.img $ mkdir mnt # 把大文件挂载到mnt文件下 $ sudo mount rootfs.img mnt # 把下载好的ubuntu解压到mnt文件下,此时因为mnt与rootfs.img有关联,放到mnt文件下,就是放到了rootfs.img文件中了 $ sudo tar -xzvf ubuntu-base-16.04.1-base-arm64.tar.gz -C mnt/ $ sudo cp -a /usr/bin/qemu-aarch64-static mnt/usr/bin/ # 把本机中的dns文件放到mnt中,否则在进入文件系统时无法连接网络, 官网中是手动设置的dns文件,此时不设置,后续配置会遇到/etc/network/interfaces.d/eth0: No Such file or directory $ sudo cp /etc/resolv.conf mnt/etc/ qemu-aarch64-static是其中的关键,能在 x86_64 主机系统下 chroot 到 arm64 文件系统
$ sudo chroot mnt/ # 这里可以修改设置 $ USER=firefly $ HOST=firefly # 创建用户 $ useradd -G sudo -m -s /bin/bash $USER $ passwd $USER # 输入密码 # 设置主机名和以太网 $ echo $HOST > /etc/hostname $ echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts $ echo "127.0.0.1 $HOST" >> /etc/hosts $ echo "auto eth0" > /etc/network/interfaces.d/eth0 $ echo "iface eth0 inet dhcp" >> /etc/network/interfaces.d/eth0 # 使能串口 $ ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service # 安装包,在安装之前可以进行更换镜像源,也可以不进行更换,如果遇到速度慢等问题,可以更换国内镜像源 $ apt-get update $ apt-get upgrade $ apt-get install ifupdown net-tools ping $ apt-get install udev sudo ssh vim # 退出文件系统 $ exit # 取消挂载 $ sudo umount /mnt && cd .. $ pwd /opt/linux 如果还有什么想要安的软件可以在退出文件系统之前继续安装。 重要:上述命令中有一行使能串口的软连接命令,暂时可以按照这么写,因为我在后续启动的过程中,遇到了以下错误 Timed out waiting for device dev-ttyS0.device 在获取dev-ttyS0.device时超时了,默认等待5分钟才能进行下一步,这是因为在/dev目录下根本没有ttyS0这个文件,具体解决方法,我放到了后面的踩坑记录中,可参考。 配置Rootfs
$ cd /opt/liunx $ sudo vim device/rockchip/rk3328/roc-rk3328-cc.mk export RK_ROOTFS_IMG=rootfs/rootfs.img
运行完上述脚本后,在 device/rockchip/ 目录下,生成 .BoardConfig.mk 软链接 device/rockchip/rk3328/roc-rk3328-cc.mk 模块编译 以下编译如果有遇到错误,请看最后的踩坑,如果有一样的错误可参照修改。 build脚本参数如下: ./build.sh --help ====USAGE: build.sh modules==== uboot -build uboot kernel -build kernel rootfs -build default rootfs, currently build buildroot as default buildroot -build buildroot rootfs yocto -build yocto rootfs, currently build ros as default ros -build ros rootfs debian -build debian rootfs pcba -build pcba recovery -build recovery all -build uboot, kernel, rootfs, recovery image cleanall -clean uboot, kernel, rootfs, recovery firmware -pack all the image we need to boot up system updateimg -pack update image sdbootimg -pack sdboot image save -save images, patches, commands used to debug default -build all modules BoardConfig -select the corresponding BoardConfig.mk file 编译u-boot: $ ./build.sh uboot 编译kernel: $ ./build.sh kernel 编译rootfs:
表示recovery分区没有找到,类似的如oem.img、userdata.img,上文提到,这些属于可省略分区镜像,可以不用理会。
#该命令打包为RK固件 $ ./build.sh updateimg 注意:每次打包固件前,需要运行mkfirmware.sh脚本更新rockdev/下的分区镜像 烧写固件到SD卡中 遇到的错误 Uboot
sudo apt-get install swig
$ sudo apt-get install python-dev kernel
$ sudo apt-get install liblz4-tool 打包
$ sudo apt-get install genext2fs 启动
解决: $ ls /etc/systemd/system/getty.target.wants -al lrwxrwxrwx 1 root root 34 Jul 19 2016 getty@tty1.service -> /lib/systemd/system/getty@.service lrwxrwxrwx 1 root root 41 Aug 1 02:19 serial-getty@ttyS0.service -> /lib/systemd/system/serial-getty@.service # 先把S0那条软连接删除 $ cd /etc/systemd/system/getty.target.wants $ sudo rm -rf serial-getty@ttyS0.service # 因为确定我/dev下存在的是ttyS1文件,所以再次运行使能串口的软连接,不同的是改成S1 $ ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS1.service
解决: $ sudo vim /etc/systemd/system/network-online.target.wants/networking.service # 找到以下参数并修改,默认单位是秒,可自由修改时间,退出保存即可 imeoutStartSec=20 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1443 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
1570 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
3581 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-6 03:24 , Processed in 0.653458 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号