开发环境介绍:

主机:Windows 11
虚拟机:VMware17 Pro
虚拟机系统:Ubuntu20.04        
开发板:HALLY6_BASEBOARD_V2.0

一、环境搭建:

常用的环境搭建参考另一篇文章: 全志T113-S3开发板开发记录
开发板环境搭建参考官方资料:

http://docs.ingenic.com.cn/platforms/halley6/category/01-getting-startedhttp://docs.ingenic.com.cn/platforms/halley6/category/01-getting-started

视频参考资料Ingenic的个人空间-Ingenic个人主页-哔哩哔哩视频

二、具体开发步骤:

1.开启共享文件夹,将编译后的烧录文件拷贝到windows,挂载共享文件夹命令: 
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
2.使用串口进入开发板Linux终端,直接rx,tx接线就行,波特率默认3000000。
3.使用ssh登录开发板Linux终端,需要先打通网络,WiFi或以太网

参考文档,源码路径下:

doc\FAE文档\linux平台使用ssh登录开发板.pdf

doc\FAE文档\Halley6_X1600E_V2.0\Halley6_X1600E_v2.0_开发板WIFI使用说明.pdf

doc\FAE文档\Halley6_X1600E_V2.0\halley6_v2.0以太网配置方法.pdf

WiFi部分操作指令

#killall udhcpc        (关掉打印udhcpc: sending discover)

#cp /etc/wpa_supplicant.conf /usr/data/ -arf

#vi /usr/data/wpa_supplicant.conf 
#cat /usr/data/wpa_supplicant.conf 
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1

network={
  ssid="YYC"
  psk="12345678"
}

# udhcpc -i wlan0        (不行的话就重启一下设备)
udhcpc: started, v1.31.1
udhcpc: sending discover
udhcpc: sending select for 192.168.0.5
udhcpc: lease of 192.168.0.5 obtained, lease time 604800
deleting routers
adding dns 192.168.1.1

4.使用NFS在线调试程序。参考链接:君正X2000NFS文件系统挂载
mkdir /tmp/nfs
mount -t nfs 192.168.0.167:/nfsroot /tmp/nfs

5.具体功能测试,命令测试,代码测试。

6.移植sqlite3数据库

下载文件:https://www.sqlite.org/2025/sqlite-autoconf-3510100.tar.gz

解压文件:

tar -zxvf sqlite-autoconf-3360000.tar.gz

生成编译文件:

./configure --host=mips-linux-gnu --prefix=$PWD/install CC=/home/ubuntu/x1600/buildroot/buildroot/output/host/usr/bin/mips-linux-gnu-gcc --force
  • ./configure=:这是许多开源软件包中的脚本,用于配置软件包的构建选项。

  • --prefix=:指定安装路径目录。

  • CC=:指定交叉编译使用的C编译器路径。

  • -- force:覆盖上一次的配置构建选项

编译并安装:

make && make install

查看安装后的文件:

ubuntu@ubuntu:~/x1600/third_party/sqlite3/sqlite-autoconf-3510100/install$ ls
bin  include  lib  share

查看sqlite3执行文件格式,可以看出依赖的是动态库:

ubuntu@ubuntu:~/x1600/third_party/sqlite3/sqlite-autoconf-3510100/install$ file bin/sqlite3
bin/sqlite3: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, not stripped


拷贝/bin/以及依赖的动态库/lib/libsqlite3.s* 到buildroot重新打包烧录

cp bin/sqlite3 /home/ubuntu/x1600/buildroot/buildroot/output/target/usr/bin
cp lib/libsqlite3.s* /home/ubuntu/x1600/buildroot/buildroot/output/target/usr/lib

开发板上验证sqlite3功能,成功如下

# sqlite3 
SQLite version 3.51.1 2025-11-28 17:28:25
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> 

配置主机编译环境:

cp ./ /home/ubuntu/x1600/buildroot/buildroot/output/host/mipsel-buildroot-linux-gnu/sysroot/usr/ -r

7.其他常用库

buildroot中选择:

libcurl

mbedtls

paho-mqtt-c

ntp->ntpdate

保存配置:

cp .config ../../build/configs/buildroot/buildroot_wifi_common_defconfig

三、问题总结:

1.代码下载部分,ssh加密算法不兼容问题

报错:

stderr: Unable to negotiate with 119.136.25.25 port 29418: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.


解决方法:

sudo vim /etc/ssh/ssh_config

找到如下一行,将注释去掉:

Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc

2.代码下载部分,遇到部分仓库文件不存在

报错:
Please make sure you have the correct access rights
and the repository exists.
error: Cannot fetch demos/car_display from ssh://sz_halley2@119.136.25.25:29418/mirror/linux/demos/car_display
Fetching: 100% (1/1), done in 4.182s
Updating files: 100% (11659/11659), done.les:  35% (4194/11659)
Updating files: 100% (13826/13826), done.ootUpdating files:  82% (11452/13826)
Checking out:  9% (7/71) buildroot/buildroot_patcherror: Cannot checkout demos/car_display: ManifestInvalidRevisionError: revision master in demos/car_display not found
Checking out:   9% (7/71), done in 4.869s
error: in `sync`: revision master in demos/car_display not found
 


解决办法:
跳过失败的项目
./repo sync --fail-fast

3.编译部分,如果要用Linux5.10版本(不推荐,编译太慢了)

ubuntu@ubuntu:~/x1600/build$ make x1600e_halley6_nand_5.10_defconfig 
..writing .config.in
make[1]: Entering directory '/home/ubuntu/x1600/build'
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
/bin/sh: 1: flex: not found
make[3]: *** [scripts/Makefile.host:9: scripts/kconfig/lexer.lex.c] Error 127
make[2]: *** [Makefile:646: x1600_module_base_linux_sfc_nand_defconfig] Error 2
make[1]: *** [Makefile:140: set_kernel_configs] Error 2
make[1]: Leaving directory '/home/ubuntu/x1600/build'
make: *** [Makefile:156: x1600e_halley6_nand_5.10_defconfig] Error 2

解决办法:

sudo apt install flex bison

4.ssh编译部分,目录存在,手动创建一个就行

rootfs_config/tools/mv_etc_ssh.sh /home/ubuntu/x1600/buildroot/buildroot/output/target
cp "rootfs_config/file/ssh/sshd_config" /home/ubuntu/x1600/buildroot/buildroot/output/target/save/etc/ssh/
cp: cannot create regular file '/home/ubuntu/x1600/buildroot/buildroot/output/target/save/etc/ssh/': No such file or directory
make[3]: *** [/home/ubuntu/x1600/buildroot/buildroot/../buildroot_patch/tools/post-buildroot.mk:65: all] Error 1
make[2]: *** [Makefile:772: target-finalize] Error 2
make[1]: *** [Makefile:84: _all] Error 2
make: *** [Makefile:92: all] Error 2
 

解决办法:

mkdir -p /home/ubuntu/x1600/buildroot/buildroot/output/target/save/etc/ssh/

5.使用SecureCRT登录ssh提示"与SSH2服务器的键盘交互身份验证失败",因为按照开发文档设置了登录密码,跳过就可以输密码了。

6.vscode无法输入中文,实测有效https://blog.csdn.net/weixin_43595452/article/details/148920572?fromshare=blogdetail&sharetype=blogdetail&sharerId=148920572&sharerefer=PC&sharesource=Yun_yichen&sharefrom=from_link

7.ota功能添加ota_config.in文件,结尾必须加一个换行(Linux的),官网文档没提这回事

遇到问题:

# sh /etc/ota_bin/network_ota_update.sh 
try to get http://files.sunshineken.com/device/ota/board_test/ota_config.in
failed to get ota released version
ota: error

解决办法:在Linux系统里面生成这个文件

echo current_version=1  >> ota_config.in

分析原因:通过查看文件的16进制数据可以知道,Linux下的换行是\n对应0a ,windows下的是\r\n对应0d0a

ubuntu@ubuntu:$ hexdump -C ota_config.in
00000000  63 75 72 72 65 6e 74 5f  76 65 72 73 69 6f 6e 3d  |current_version=|
00000010  31 0a                                             |1.|
00000012
 

8.​ rmem通常是linux系统为特定的模块预留的内存空间, 常用的是camera、lcd.

遇到问题:

# dmesg 
[ 1577.284765] rmem: can't get enough mem, alloc 64 bytes from kernel
[ 1577.284787] rmem: can't get enough mem, alloc 64 bytes from kernel
[ 1577.288828] rmem: can't get enough mem, alloc 1843200 bytes from kernel

解决:按照参考文档,反向添加
X1600 释放RMem中的内存以共享所有的内存空间 | Ingenic Docs

9.rtc影响开机启动时间

遇到问题:

[    0.578976] RTC : wait_write_ready timeout!
[    0.789149] RTC :  wait_writable timeout!
[    0.999236] RTC : wait_write_ready timeout!
[    1.209127] RTC : wait_write_ready timeout!
[    1.419206] RTC : wait_write_ready timeout!
[    1.629275] RTC : wait_write_ready timeout!

不需要rtc功能可由软件解决,需要rtc功能排查硬件:

硬件:RTC 时钟源(32 k)没起振 或 VBAT 掉电

软件直接注释掉:

~/x1600$ code ./kernel/kernel-x2000/module_drivers/drivers/rtc/rtc-ingenic.c

static void ingenic_rtc_writel(struct ingenic_rtc *dev,int offset, unsigned int value)
{

    int timeout = 0x100000;
    mutex_lock(&dev->mutex_wr_lock);
    // wait_write_ready(dev);
    // writel(WENR_WENPAT_WRITABLE, dev->iomem + RTC_WENR);
    // wait_write_ready(dev);
    // while (!(ingenic_rtc_readl(dev,RTC_WENR) & WENR_WEN) && timeout--);
    // if (timeout <= 0){
    //     pr_info("RTC :  wait_writable timeout!\n");
    // }
    // wait_write_ready(dev);
    // writel(value,dev->iomem + offset);
    // wait_write_ready(dev);
    mutex_unlock(&dev->mutex_wr_lock);
}

10.LCD st7701 RGB18bit ,初始化需要发送9位spi数据

打开文件:x1600/kernel/kernel-x2000/include/linux/spi/spi.h

添加函数:
static inline int
write_9bit(struct spi_device *spi, bool dc, u8 data)
{
    u16 word = (dc ? 0x0100 : 0x0000) | data;  // D/CX 放 bit8
    struct spi_transfer t = {
        .tx_buf = &word,
        .rx_buf = NULL,
        .len = 2,              // 16-bit = 2 字节
        .bits_per_word = 9,    // 关键:9-bit 模式
        .speed_hz = spi->max_speed_hz,
    };
    struct spi_message m;

    spi_message_init(&m);
    spi_message_add_tail(&t, &m);

    return spi_sync(spi, &m);
}

使用:

// 写命令(DC=0)
write_9bit(spi, 0, 0x36);

// 写数据(DC=1)
write_9bit(spi, 1, 0xFF);

11.调试WiFi遇到mmc0寻不到设备,一些调试思路。

报错:

[ 1.942677] md_ingenic,mmc md_ingenic,mmc.1: no support for card's volts [ 1.942699] mmc0: error -22 whilst initialising SDIO card [ 1.946607] md_ingenic,mmc md_ingenic,mmc.1: no support for card's volts [ 1.946619] mmc0: error -22 whilst initialising MMC card [ 1.992620] md_ingenic,mmc md_ingenic,mmc.1: no support for card's volts [ 1.992635] mmc0: error -22 whilst initialising SDIO card [ 1.996547] md_ingenic,mmc md_ingenic,mmc.1: no support for card's volts [ 1.996558] mmc0: error -22 whilst initialising MMC card

解决:

硬件问题或者软件配置错误导致的,先看外围电路工作电压是否正常,再修改配置调试。

验证硬件是否通,第一个验证msc是否配置成功,第二个验证是否寻到sdio设备。

# ls /sys/class/mmc_host/
mmc0
# ls /sys/bus/sdio/devices/
mmc0:0001:1

我实际配置的是msc1,这里看到的却是mmc0,君正平台这样是正常的。

其他功能总结:

君正X1600E-HALLY6开发板LVGL踩坑记录

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐