rk3588 编译(使用github公版源码)和烧录(sd、emmc)

这篇具有很好参考价值的文章主要介绍了rk3588 编译(使用github公版源码)和烧录(sd、emmc)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 github 上的代码进行编译
https://github.com/rockchip-linux/rkbin/tree/master
https://github.com/rockchip-linux/u-boot/tree/next-dev
https://github.com/rockchip-linux/kernel/tree/develop-5.10
下载他们的压缩包,自行解压,解压后把文件夹名里的分支名去掉

mkimage 需要使用 rockchip 提供的 uboot 里的
sd 的启动优先级低于 emmc,如果 emmc 里有固件就不能从 sd 卡启动,所以需要擦除 emmc,可以用 rkdeveloptool 工具来操作

使用 debian 系统文章来源地址https://www.toymoban.com/news/detail-665516.html

软件环境

apt
    sudo apt install make gcc-aarch64-linux-gnu build-essential device-tree-compiler flex bison libncurses-dev libssl-dev qemu-user-static debootstrap

python2
    如果装不了就像这样手动编译安装

    wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz // python2 最后的版本
    tar -xvf Python-2.7.18.tgz
    cd Python-2.7.18
    ./configure
    make -j16
    sudo make altinstall

    使用 which python2 查找 python2 的位置,如果没有就查找 python2.7,然后在 python2.7 的位置做一个 python2 指向 python2.7 的软链接,比如 sudo ln -s /usr/local/bin/python2.7 /usr/local/bin/python2

python3
    use "which python" or "which python3", if no found python but found python3, it use "sudo ln -s /usr/bin/python3 /usr/bin/python"

uboot

编译
    export CROSS_COMPILE=aarch64-linux-gnu-  // 新的终端都要先执行一次
    make rk3588_defconfig
    make -j16

idbloader.img
    tools/mkimage -n rk3588 -T rksd -d ../rkbin/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.11.bin:spl/u-boot-spl.bin idbloader.img

u-boot.its
    cp ../rkbin/bin/rk35/rk3588_bl31_v1.38.elf bl31.elf
    arch/arm/mach-rockchip/make_fit_atf.sh u-boot.dtb > uboot.its

u-boot.itb
    cp ../rkbin/bin/rk35/rk3588_bl32_v1.13.bin tee.bin
    tools/mkimage -f uboot.its -E uboot.itb

spi flash 固件 // 按需使用
    dd if=/dev/zero of=rkspi_loader.img bs=1M count=0 seek=4
    /sbin/parted -s rkspi_loader.img mklabel gpt
    /sbin/parted -s rkspi_loader.img unit s mkpart idbloader 64 1023
    /sbin/parted -s rkspi_loader.img unit s mkpart uboot 1024 7167
    dd if=idbloader.img of=rkspi_loader.img seek=64 conv=notrunc
    dd if=u-boot.itb of=rkspi_loader.img seek=1024 conv=notrunc

linux

配置文件和设备树
    使用板卡厂商提供的设备树,这里用的是飞凌的 ok3588c
        FET3588-C.dtsi、OK3588-C-Camera.dtsi、OK3588-C-common.dtsi、OK3588-C-Linux.dts 放到 arch/arm64/boot/dts/rockchip 里
        电源管理芯片的设备树有单双之分,不能通用。单:rk3588-rk806-single.dtsi;双:rk3588-rk806-dual.dtsi

    修改
        OK3588-C-Camera.dtsi
            EXTIO_GPIO_P06 改为 RK_PA6
            EXTIO_GPIO_P07 改为 RK_PA7
            EXTIO_GPIO_P10 改为 RK_PB0
            EXTIO_GPIO_P11 改为 RK_PB1
            EXTIO_GPIO_P05 改为 RK_PA5
            EXTIO_GPIO_P04 改为 RK_PA4
            EXTIO_GPIO_P01 改为 RK_PA1
            EXTIO_GPIO_P00 改为 RK_PA0
            EXTIO_GPIO_P03 改为 RK_PA3
            EXTIO_GPIO_P02 改为 RK_PA2

            从板卡厂商整合包里的 kernel/include/dt-bindings/pinctrl/rockchip.h 得出。这是 TCA6424ARGJR 芯片,用于 i2c 扩展 io,比如 EXTIO_GPIO_P06 是扩展出的 io 的序号,用这个需要修改 rockchip.h 文件,这里用已有 RK_PA6 代替序号,RK_PA6 也是序号

        OK3588-C-common.dtsi
            dsi0_in_vp2 和紧贴该节点上面的 dsi0
                两个节点里的 status 都赋值为 okay // 这样 dsi0 的 mipi 屏就能显示了

            i2c2 里的 ft5x06_dsi0
                取消注释 interrupt-parent、interrupts,注释 irq-gpio // 驱动代码不同导致的修改

            i2c2 里的 gt9xx_dsi0
                status 赋值为 disabled // ft5x06_dsi0 和 gt9xx_dsi0 使用同一中断脚,所以节点不能都开启,这里开启的是 ft5x06_dsi0,所以 gt9xx_dsi0 就要关闭

            i2c2 里的触摸芯片对应的是 dsi0 接口,如果屏幕接 dsi1 上就用同样的方法修改 i2c5

        OK3588-C-Linux.dts
            如果要烧录到 sd 卡里,需要更改 bootargs,修改 / 里的 chosen 节点
                bootargs 值的 root 赋值为 /dev/mmcblk0p4 // mmcblk0 是设备号,从 0 开始,p4 是分区 4,从 1 开始

            / 里的 fiq_debugger 节点
                rockchip,baudrate 赋值为 1500000 // 串口波特率

        arch/arm64/boot/dts/rockchip/Makefile
            删除所有内容并添加 dtb-$(CONFIG_ARCH_ROCKCHIP) += OK3588-C-Linux.dtb

        boot.its
            fdt 节点
                data = /incbin/("arch/arm64/boot/dts/rockchip/OK3588-C-Linux.dtb"); // 文件的在电脑的路径,工具会去这里找
                arch = "arm64";

            kernel 节点
                data = /incbin/("arch/arm64/boot/Image.gz");
                arch = "arm64";
                compression = "gzip";

                如需手动制作 .gz 镜像:cat Image | gzip -n -f -9 > Image.gz

            删除 resource 节点

            configurations 节点
                删除 conf 里的 multi 部分
                删除 conf/sign-images 里的 multi 部分

编译
    export ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- // 新的终端都要先执行一次
    make rockchip_linux_defconfig rk3588_linux.config
    make menuconfig // rockchip 提供的公有配置也能启动,额外的驱动比如 ft5x06 的驱动就要在这自行开启。ft5x06 的位置在 Device Drivers/Input device support/Touchscreens/EDT FocalTech FT5x06 I2C Touchscreen support
    make -j16

    如果编译报 ...error, forbidden warning,就在 scripts/gcc-wrapper.py 中注释掉 run_gcc() 里的 interpret_warning()

boot.itb
    ../u-boot/tools/mkimage -f boot.its -E -p 0x800 boot.itb

rootfs

sudo debootstrap --arch=arm64 bookworm rootfs https://mirrors.tuna.tsinghua.edu.cn/debian/ // bookworm 是 debian 12 的代号,rootfs 是放文件的目录

sudo chroot rootfs
passwd root // 设置 root 用户的密码,不设置密码就登录不了,默认是 root 用户
exit

dd if=/dev/zero of=rootfs.img bs=1G count=1
sudo mkfs.ext4 rootfs.img
mkdir rootfs_mount
sudo mount rootfs.img rootfs_mount
sudo cp -rfp rootfs/* rootfs_mount
sudo umount rootfs_mount
rm -r rootfs_mount
sudo e2fsck -f rootfs.img
sudo resize2fs -M rootfs.img // 调整镜像为实际大小

烧录

把镜像都拿到一个单独的文件夹里,方便操作

烧录到 sd卡
    分区
        sudo sgdisk -z -og /dev/sdb // sdb 是 sd卡
        sudo sgdisk --resize-table=128 -a 1 -n 1:64:16383 -c 1:idbloader -n 2:16384:32767 -c 2:uboot -n 3:32768:163839 -c 3:boot -n 4:163840: -c 4:rootfs -p /dev/sdb
        // "boot" 名字不要改

    烧录
        sudo dd if=idbloader.img of=/dev/sdb1 bs=512
        sudo dd if=uboot.itb of=/dev/sdb2 bs=512
        sudo dd if=boot.itb of=/dev/sdb3 bs=512
        sudo dd if=rootfs.img of=/dev/sdb4 bs=512
        sync

烧录到 emmc
    rkdeveloptool
        下载:https://github.com/rockchip-linux/rkdeveloptool

        编译
            sudo apt install libudev-dev libusb-1.0-0-dev dh-autoreconf pkg-config libusb-1.0
            autoreconf -i
            ./configure
            make
            sudo make install

    rk3588_spl_loader_v1.11.112.bin(MiniLoader.bin)
        在 rkbin 下执行 ./tools/boot_merger ./RKBOOT/RK3588MINIALL.ini

    parameter.txt
        在 官方固件/device/rockchip/rk3588 下

        修改
            CMDLINE 里面的分区部分改为 0x00004000@0x00004000(uboot),0x00020000@0x00008000(boot),-@0x00028000(rootfs:grow)

            uboot 分区大小为 8MByte,boot 分区大小为 64MByte,rootfs 分区占据之后的所有空间

        在 OK3588-C-Linux.dts 里 / 下的 chosen 节点里有 bootargs = "earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 irqchip.gicv3_pseudo_nmi=0 root=PARTUUID=614e0000-0000 rw rootwait";,这个在 rk3588-linux.dtsi 里也有,这是 uboot 传给 linux 的参数,614e0000-0000 就是 parameter.txt 里的 rootfs 的 uuid,内核就是靠这个在 GPT 分区表里找到 rootfs 的分区

    烧录
        先将设备启动到 maskrom 模式

        sudo rkdeveloptool db rk3588_spl_loader_v1.11.112.bin // 先要下载这个才能进行其他操作
        sudo rkdeveloptool ef // 擦除,按需使用
        sudo rkdeveloptool gpt parameter.txt
        sudo rkdeveloptool wl 0x40 idbloader.img
        sudo rkdeveloptool wl 0x4000 u-boot.itb
        sudo rkdeveloptool wl 0x8000 boot.itb
        sudo rkdeveloptool wl 0x28000 rootfs.img

minicom

串口工具 "minicom",使用 "sudo minicom -D /dev/ttyUSB0", 修改 bps 为 1500000, flow control 设置为 "No", 选择保存为默认 "Save setup as dfl"

开发板启动后

登录用户名为 root

扩展根分区
    lsblk // 查看挂载在 / 的分区名和分区的物理大小,这里的分区名是 mmcblk0p4
    df -h // 查看挂载在 / 的分区的逻辑大小
    resize2fs /dev/mmcblk0p4 // 调整系统记录的 / 的大小到剩余分区的大小

联网测试
    ip addr // 查看网卡信息
    ip link set end0 up // 启动 end0 网卡
    dhclient end0 // end0 dhcp
    ping 8.8.8.8 // 测试网络是否连通
    date -s '2023-07-09 19:07:00' // 设置为实际时间,如果系统时间和实际时间误差过大就访问不了 https,用不了软件源
    apt update // 测试网络是否正常

更改软件源
    添加到 /etc/apt/sources.list 文件里

            deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stable main contrib non-free non-free-firmware
            deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stable-updates main contrib non-free non-free-firmware
            deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stable-backports main contrib non-free non-free-firmware
            deb https://mirrors.tuna.tsinghua.edu.cn/debian-security stable-security main contrib non-free non-free-firmware

    apt update        

网卡自动联网
    apt install network-manager // 不需要配置

时间自动同步
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime // 设置时区
    apt install chrony
    timedatectl set-ntp true // 自动获取时间
    
安装桌面
	xfce
        apt install xfce4 onboard
        nano /etc/lightdm/lightdm-gtk-greeter.conf // 启用软键盘,登录界面点击右上角的小人图标,选择 On Screen Keyboard 就可以唤起软键盘进行输入
            [greeter] 下的 keyboard 取消注释并赋值为 onboard

        重启之后屏幕就显示登录页面了。登录进去后要使用软键盘需要设置一下,点击 状态栏/Applications/Settings/OnBoard Settings,进入软件后点击 General,选择 Auto show when editing text,关闭软件。再点击 状态栏/Applications/Accessories/OnBoard 以启动软键盘,状态栏就会显示 onboard 的图标,就可以在有编辑操作的时候自动唤起软键盘了,每次登录后都要启动一次软键盘。桌面里的命令行无法唤起软键盘,这时可以点击状态栏里的软键盘图标,让软键盘常驻,然后就可以输入了,点击软键盘的关闭按钮就可以关闭软键盘界面

    	浏览器
        	apt install chromium fonts-wqy-zenhei

    	任务管理器
        	apt install xfce4-taskmanager

	gnome
		apt install gnome

其他

如果接在下级路由器并且该路由器工作在交换机模式时,需要注意地址的段须是根路由器的段,包括路由表、网关等。
dhclient 获取的 ip 可能是网线连接的那个路由器的段,有些路由器的段会从 192.168.2.1 开始,交换机模式相当于扩展网口,如果 ip 段不一样不能正常工作,如果出现这种情况可以连接根路由器测试是否正常,然后向指定 ip 获取参数(dhclient -s 192.168.1.1),或者手动设置 ip

ip addr flush dev end0 // 删除 end0 网卡的所有 ip
ip addr add 192.168.1.22/24 dev end0 // 添加 ip
ip route flush dev end0 // 删除路由表
ip route add 192.168.1.0/24 dev end0 // 路由 ip
ip route add default via 192.168.1.1 dev end0 // 网关 ip

参考
    root@debian:~# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: end1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
        link/ether 32:f6:dd:52:06:46 brd ff:ff:ff:ff:ff:ff
    3: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 2e:f6:dd:52:06:46 brd ff:ff:ff:ff:ff:ff
        inet 192.168.1.60/24 brd 192.168.1.255 scope global dynamic noprefixroute end0
           valid_lft 258942sec preferred_lft 258942sec
        inet6 240e:3a1:ef1:4ee0:9eb2:ec27:f9f9:c09e/64 scope global dynamic noprefixroute 
           valid_lft 6945sec preferred_lft 3345sec
        inet6 fe80::b0b2:5f61:7807:244/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    root@debian:~# ip route
    default via 192.168.1.1 dev end0 proto dhcp src 192.168.1.60 metric 100 
    192.168.1.0/24 dev end0 proto kernel scope link src 192.168.1.60 metric 100

到了这里,关于rk3588 编译(使用github公版源码)和烧录(sd、emmc)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 对stm32程序(HEX)的读取和烧录(使用JLink和JFlash)

    本文主要讲解:使用J-LinK仿真器,借助于J-Flash软件,如何读取现有的stm32内部的程序(HEX文件),并烧录到另一台新的stm32中。 (前提是原stm32未进行加密处理) 先介绍下载器 J-LinK  和 软件 J-Flash : 上一篇介绍了 J-LinK-OB改造版 仿真/调试器 使用说明: J-LinK-OB改造版 仿真

    2024年02月05日
    浏览(48)
  • 瑞芯微RK3588,交叉编译opencv

    这里以opencv-4.6.0为例子。 下载: opencv-4.6.0 opencv_contrib-4.6.0 .cache 提取码:0816 eigen-3.3.9. ffmpeg-6.0 yasm-1.3.0 交叉编译器_gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz 注意:不要关闭当前终端!后面编译opencv也在当前终端。这里很重要! 安装libgtk2.0-dev时的报错,解决方案 以上,有

    2024年02月08日
    浏览(56)
  • RK3588移植-opencv交叉编译aarch64

    注意:本文中的所有配置相关路径都与当前安装的路径有关,需要根据自己的环境进行自行修改!!! OPENCV如果需要ffmpeg视频模块的话,不建议用cmake-gui,有很多bug。建议在ffmpeg相关依赖配置好后使用“问题:”中的cmake命令。 在做yolov5移植rk3588时,由于RKNPU2的example中open

    2024年02月06日
    浏览(51)
  • 迅为RK3588开发板编译 Buildroot单独编译图形化界面三

    第三步:编译 Recovery 首先在 linux 源码目录下输入以下命令进入编译的 UI 界面,进入之后如下所示: ./build.sh 然后将光标移动到第四个 recovery,点击回车即可开始 recovery 的编译,编译过程如下所示: 编译完成如下图所示: 第四步:编译 buildroot 关注下一章节,迅为R

    2024年02月02日
    浏览(47)
  • 迅为RK3588开发板编译 Buildroot单独编译图形化界面(编译 buildroot)

    第四步:编译 buildroot 首先在 linux 源码目录下输入以下命令进入编译的 UI 界面,进入之后如下所示: ./build.sh 然后将光标移动到第三个 rootfs,点击回车会进入到文件系统镜像选择界面,如下图所示: 这里总共有五种镜像供编译选择,由于本小节要编译的是 buildroot,所以将光

    2024年01月20日
    浏览(44)
  • RK3588开发板编译环境Ubuntu20.04编译配置增加交换内存

    迅为提供的编译环境 Ubuntu20.04 默认配置了交换内存是 9G,如果在编译过程中,因内 存不够而编译报错,可以参考本小节进行设置。 这里举例分配 5G 交换内存。 在开始之前,使用命令检查一下您的 ubuntu 的 swap 分区。 sudo swapon --show 通过以下命令创建一个用于 swap 的文件 su

    2024年02月11日
    浏览(45)
  • 一套rk3588 rtsp服务器推流的 github 方案及记录 -02

    整体方案参考上一篇博文 https://blog.csdn.net/qq_31764341/article/details/134810566 本篇博文主要介绍基于RK3588进行硬解码 还是之前的套路,我不生产代码,我只是代码的搬运工,今天我们搬运瑞芯微的官方代码,并记录下来整个调试历程。两篇文章下来,我们3588上面的流肯定能出来

    2024年03月24日
    浏览(40)
  • 一套rk3588 rtsp服务器推流的 github 方案及记录 -01

    我不生产代码,我只是代码的搬运工,相信我,看完这个文章你的图片一定能变成流媒体推出去。 诉求:使用opencv拉流,转成bgr数据,需要把处理后的数据(BGR)编码成264,然后推流推出去,相当于直播(实时编码) 超低延迟的RTSP播放器 https://github.com/tsingsee/EasyPlayer-RTSP-

    2024年02月04日
    浏览(54)
  • iTOP-RK3588开发板Ubuntu 系统交叉编译 Qt 工程-命令行交叉编译

    使用源码 rk3588_linux/buildroot/output/rockchip_rk3588/host/bin/qmake 交叉编译 QT 工程。 最后烧写编译好的 buildroot 镜像,将编译好的 QT 工程可执行程序在 buildroot 系统上运行。 交叉编译 QT 工程如下所示,首先进入 QLed 的工程目录下。 然后使用以下命令交叉编译 QT 工程,如下图所示:

    2024年02月13日
    浏览(41)
  • rk3588/rk356x/rv1109/rv1126 live555移植+mpp编译 rtsp拉流

    本文主要是为了记录一下rk板子的踩坑日记。 项目主要是rk3588 rtsp拉流。 1.下载MPP源码:https://github.com/rockchip-linux/mpp 2.rk3588/rk356x的板子进入Mpp源码目录 mpp/build/linux/aarch64 (rk3588/rk356x是64位板子)中,修改 arm.linux.cross.cmake 文件中的配置 修改 make-Makefiles.bash 的配置,主要改

    2023年04月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包