一,环境安装
rk3588 编译环境 ubuntu2204
虚拟机按照好后,更新:
sudo apt-get install git bc bison build-essential curl flex g++-multilib gcc-multilib gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc yasm zip zlib1g-dev python device-tree-compiler expect g++ patchelf gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build fakeroot cmake python-pip repo ssh make gcc libssl-dev unzip ncurses-dev
编译环境:git clone https://github.com/orangepi-xunlong/orangepi-build.git -b next
编译全包如果出错,例如git链接错误,重启虚拟机重新编译。
二,编译烧录
首先设置配置文件保证修改不会被重新编译的文件覆盖。
vim userpatches/config-default.conf
IGNORE_UPDATES="yes"
按照用户手册进行全编译 执行: sudo ./build.sh
生成镜像文件后使用工具烧录。
三,修改烧录uboot
使用命令单独编译 uboot kernel
sudo ./build.sh BOARD=orangepi5pro BRANCH=legacy BUILD_OPT=u-boot KERNEL_CONFIGURE=no
sudo ./build.sh BOARD=orangepi5pro BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no
wifi 连接
sudo nmcli dev wifi connect “xxxx” password "xxxx"
发送编译结果到目标开发版
scp u-boot/v2017.09-rk3588/u-boot.itb orangepi@192.168.0.22:/home/orangepi/
目标开发版执行uboot写入:
dd if=/home/orangepi/u-boot.itb of=/dev/mmcblk1 seek=16384 conv=notrunc status=none
dd if=/home/orangepi/idbloader.img of=/dev/mmcblk1 seek=64 conv=notrunc status=none
重启查看log修改生效。
四,修改测试
修改文件添加uboot命令,用来控制led灯状态。
u-boot/v2017.09-rk3588/cmd/test.c
static int do_myled(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
int ret = 0;
/*
gpio bank*32 + group *8 + x
pwm_led0 = gpio1_c2_d = 1*32 + 2*8 + 2 = 50
pwm_led1 = gpio1_c6_d = 1*32 + 2*8 + 4 = 54
*/
int gpio = 0;
int on = 0;
if(strncmp("led1",argv[1],strlen("led1")) == 0)
gpio = 50;
else if(strncmp("led2",argv[1],strlen("led2")) == 0)
gpio = 54;
else
{
printf("err argv\n");
return -1;
}
if(strncmp("on",argv[2],strlen("on")) == 0)
on = 1 ;
if(strncmp("off",argv[2],strlen("off")) ==0 )
on = 0 ;
printf("gpio = %d on = %d\n",gpio,on);
ret = gpio_request(gpio, "myled_gpio");
if (ret) {
printf("gpio: requesting pin failed\n");
return -1;
}
gpio_direction_output(gpio,on);
gpio_free(gpio);
return 0;
}
U_BOOT_CMD(
myled, CONFIG_SYS_MAXARGS, 1, do_myled,
"turn on/off led",
NULL
);
编译后烧录uboot.重启Ctrl+c停在uboot下
输入命令:
myled led1 on
myled led2 on
myled led1 off
myled led2 off
RGB灯会出现颜色变化。