Buildroot for RK3399/zh

1 Buildroot简介

Buildroot是Linux平台上一个构建嵌入式Linux系统的框架,由Makefile脚本和Kconfig配置文件构成,旨在简化系统制作步骤,可实现一站式生成可烧写的系统固件,最终的固件包含boot-loader、kernel和rootfs,以及rootfs中的各种库和应用程序 (例如qt, gstreamer, busybox等)。

由 FriendlyELEC 提供的 Buildroot 项目是基于Rockchip原厂的 linux-sdk 制作, 项目使用 git 管理,与原厂的linux sdk更新保持同步; 

2 下载体验版固件

访问此处的下载地址下载:

Image Files
rk3399-sd-buildroot-linux-4.4-arm64-YYYYMMDD.img.zip 从SD卡启动的固件
rk3399-eflasher-buildroot-YYYYMMDD.img.zip 用于烧写到eMMC运行

解压后用 dd 或者 win32image 烧写到 SD 卡。

3 帐户与密码

用户名: root
密码: rockchip
 

4 获取项目源代码

4.1 安装 repo 工具

首先需要安装 repo 工具:

git clone https://github.com/friendlyarm/repo
cp repo/repo /usr/bin/

4.2 下载项目源代码

有以下两种途径获取项目源代码,中国大陆用户建议使用方法1的途径下载:

4.2.1 方法一:使用网盘里的repo压缩包

网盘下载地址: 

>>> Generating root filesystem image rootfs.cpio rm -rf /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs mkdir -p /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs if [ ! -e /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target/init ]; then /usr/bin/install -m 0755 fs/cpio/init /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target/init; fi echo '#!/bin/sh' > /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/fakeroot.fs echo "set -e" >> /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/fakeroot.fs echo "chown -h -R 0:0 /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target" >> /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/fakeroot.fs printf ' dbus -1 dbus -1 * /var/run/dbus - dbus DBus messagebus user\n\n' >> /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/users_table.txt PATH="/home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/host/bin:/home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/host/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" /home/yk/rk3399/debug/buildroot-rk3399/buildroot/support/scripts/mkusers /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/users_table.txt /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target >> /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/fakeroot.fs cat system/device_table.txt > /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/device_table.txt printf ' /bin/busybox f 4755 0 0 - - - - -\n /usr/libexec/dbus-daemon-launch-helper f 4755 0 0 - - - - -\n /usr/sbin/arping f 755 0 0 - - - - -\n /usr/bin/clockdiff f 4755 0 0 - - - - -\n /bin/ping f 4755 0 0 - - - - -\n /usr/bin/traceroute6 f 4755 0 0 - - - - -\n /usr/bin/fusermount f 4755 0 0 - - - - -\n /dev/console c 622 0 0 5 1 - - -\n\n' >> /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/device_table.txt echo "/home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/host/bin/makedevs -d /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/device_table.txt /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target" >> /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/fakeroot.fs printf ' cd /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target && find . | cpio --quiet -o -H newc > /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/images/rootfs.cpio\n' >> /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/fakeroot.fs chmod a+x /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/fakeroot.fs rm -f /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM PATH="/home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/host/bin:/home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/host/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/host/bin/fakeroot -- /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/fakeroot.fs rootdir=/home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target table='/home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/build/buildroot-fs/device_table.txt' makedevs: line 29: can't create node /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target/dev/console: File exists make: *** [fs/cpio/cpio.mk:61: /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/images/rootfs.cpio] Error 1 Command exited with non-zero status 2 you take 0:13.42 to build buildroot
10-10
### 解决编译mksquashfs时的多重定义错误 多重定义错误通常是由于在链接阶段,链接器发现同一个符号(如变量或函数)有多个定义。以下是一些解决此问题的方法: #### 检查重复定义 在项目的源文件中搜索 `fwriter_buffer` 和 `bwriter_buffer`,确保它们只在一个地方被定义。可以使用以下命令: ```bash grep -r "fwriter_buffer" . grep -r "bwriter_buffer" . ``` 如果发现有重复定义,将多余的定义移除或修改,确保每个符号只有一个定义。 #### 检查头文件包含 使用预处理器指令 `#ifndef`、`#define` 和 `#endif` 防止头文件的重复包含。例如: ```c // example.h #ifndef EXAMPLE_H #define EXAMPLE_H // 头文件内容 #endif // EXAMPLE_H ``` #### 检查库文件 确保编译命令中没有重复链接库文件。例如,去除重复的 `-llib` 选项: ```bash # 错误示例 gcc -o mksquashfs source.c -llib1 -llib2 -llib1 # 正确示例 gcc -o mksquashfs source.c -llib1 -llib2 ``` #### 清理并重新编译 使用 `make clean` 清理项目中的所有目标文件,然后重新编译: ```bash make clean make ``` #### 查看链接顺序 链接器对库文件的链接顺序有要求。确保库文件按照正确的顺序进行链接,通常依赖的库应该放在被依赖的库之后。 #### 使用 `extern` 关键字 如果 `fwriter_buffer` 和 `bwriter_buffer` 是在多个源文件中使用的全局变量,可以在头文件中使用 `extern` 关键字声明这些变量,然后在一个源文件中进行定义。例如: ```c // example.h extern int fwriter_buffer; extern int bwriter_buffer; // example.c #include "example.h" int fwriter_buffer; int bwriter_buffer; ``` ### 解决makedevs无法创建节点 `/home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target/dev/console`(文件已存在)的问题 `makedevs` 报错无法创建节点是因为该节点文件已经存在。可以尝试以下方法解决: #### 手动删除已存在的节点文件 在运行 `makedevs` 之前,手动删除 `/home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target/dev/console` 文件: ```bash rm /home/yk/rk3399/debug/buildroot-rk3399/buildroot/output/target/dev/console ``` 然后重新运行构建命令。 #### 修改脚本逻辑 如果 `makedevs` 脚本中有创建节点的逻辑,可以修改该脚本,在创建节点之前先检查节点是否存在,如果存在则先删除再创建。 #### 调整Buildroot配置 检查Buildroot的配置文件,确保不会重复创建该节点。有时候,Buildroot的配置可能导致节点被多次创建。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值