海思嵌入式开发笔记|U‑Boot、JFFS2、TSLIB、SQLite 调试常用命令汇总

摘要:从事海思嵌入式设备调试,经常和 U‑Boot 环境变量、tftp 烧写、JFFS2 文件系统、tslib 触摸屏、sqlite 数据库、挂载外设打交道。整理日常反复复制粘贴的命令片段,方便后续项目复盘,也给做嵌入式 Linux 的朋友做参考。

一、U‑Boot 网络环境配置(TFTP 烧录必备)

开发板通过 TFTP 下载镜像,首要配置网卡、IP、网关,保证开发板和 PC 服务器网络互通。

shell

复制代码
# 设置网卡MAC地址
setenv ethaddr 00:30:3d:35:8f:9d
# TFTP服务器IP(电脑端tftp服务地址)
setenv serverip 192.168.110.21
# 开发板本机IP
setenv ipaddr  192.168.110.253
# 网关
setenv gatewayip 192.168.110.1

二、JFFS2 根文件系统制作 & U‑Boot 烧写

JFFS2 多用于 NOR Flash,-e 指定 flash 擦除块大小。

shell

复制代码
# 制作jffs2镜像,块大小0x20000
./mkfs.jffs2  -d ../rootbox  -l  -e  0x20000  -o  smy3.img

# 擦除flash对应区间
erase  0x34300000  0x35ffffff
# tftp下载镜像到内存
tftp 0x34300000  smy3.img

也可以下载图片资源到 flash 存放:

shell

复制代码
setenv vobuf 0x34020000
tftp 0x34020000  fenjin.jpg

Flash 分区烧写示例

shell

复制代码
# 擦除+下载boot镜像
erase 0x80100000 +0x200000
tftp 0x80100000

# 擦除+下载rootfs镜像
erase 0x80300000 +0xD00000
tftp 0x80300000

bootargs 启动参数(海思平台多套备选)

mem 内存大小,console 串口,root 根文件系统,mtdparts flash 分区,是嵌入式最核心参数。

shell

复制代码
# 方案1 jffs2根文件系统 physmap‑flash
setenv bootargs 'mem=54M console=ttyAMA0,115200 root=1f01 rootfstype=jffs2 mtdparts=physmap‑flash.0:3M(boot),13M(rootfs) busclk=220000000'
setenv bootcmd 'lload;bootm 0x80100000'
saveenv

# 方案2 initrd启动
setenv bootargs mem=64M console=tty0  115200 root=/dev/ram0 initrd=0x21100000,0x250000 ip=192.168.110.253:192.168.110.21:192.168.110.1:255.255.255.0:::eth0:off

# 方案3 海思hisilicon mtd分区 jffs2
setenv bootargs mem=32M console=ttyAMA0,57600 root=/dev/mtdblock/1 rootfstype=jffs2 mmz=sdram,1,0x620M,32M boardip=192.168.110.77 mtdparts=hisilicon:3M(boot),24M(system),1M(setting)

写完saveenv保存环境变量,重启板子生效。

三、TFTP 文件上传下载(开发板 <‑>PC)

U‑Boot 阶段是 tftp;内核启动后 linux 用户态 tftp 命令:

shell

复制代码
# 下载:从服务器拿main文件到本地
tftp -g -l main -r main 192.168.1.21
# 上传:把本地sqlite3传到tftp服务器
tftp -p -l sqlite3 -r sqlite3 192.168.110.21

四、挂载 SD 卡、U 盘 vfat 外设

嵌入式经常需要读 SD 卡、U 盘做升级、拷贝资源。

shell

复制代码
# SD卡整块设备
mount -t vfat /dev/mmcblk0 /mnt
# SD卡第一个分区
mount -t vfat /dev/mmcblk0p1 /mnt

# U盘scsi设备挂载
mount -t vfat /dev/scsi/host0/bus0/target0/lun0/part1 /mnt/

注意:vfat 不支持 linux 权限,适合存放资源文件,不适合做根文件系统。

五、设备节点软链接

很多嵌入式板子硬件节点名称和上层应用预期不一致,需要建立符号链接。

shell

复制代码
ln -s /dev/vc/0 /dev/tty0
ln -s /dev/fb/0 /dev/fb0
ln -s /dev/usb/tts/0 /dev/ttyS0
ln -s /dev/usb/tts/1 /dev/ttyS1
ln -s /dev/usb/tts/2 /dev/ttyS2
ln -s /dev/usb/tts/3 /dev/ttyS3

系统时间同步:硬件时钟同步到系统时间

shell

复制代码
hwclock --hctosys

六、tar 压缩解压

shell

复制代码
# 解压
tar zxvf XXX.tar.gz
# 打包压缩多个文件
tar zcvf XXX.tar.gz WWW YYY ZZZ

七、TSLIB 触摸屏环境变量(海思 hi_touchscreen)

MiniGUI/QT 嵌入式触摸屏必备环境变量,指定 tslib 库路径、设备节点、校准文件。

shell

复制代码
export TERM=vt100;

export V_ROOT=/mnt/fjcts/tslib/
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/misc/hi_touchscreen
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$V_ROOT/share/ts/plugins
export QWS_MOUSE_PROTO=TPanel:/dev/misc/hi_touchscreen
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$V_ROOT/lib:/mnt/fjcts/lib
export TSLIB_TSEVENTTYPE="H3600"

踩坑点:tslib 环境变量不对,会出现触摸无响应、坐标偏移,需要确认hi_touchscreen设备节点是否存在。

八、网络配置(内核启动后)

shell

复制代码
# 设置网卡IP
ifconfig eth0 192.168.110.77 netmask 255.255.255.0 up 
# 添加默认网关
route add default gw 192.168.110.1
# 回环网卡启用
ifconfig lo up

九、GCC 交叉编译示例(MiniGUI、jpeg、png 多库链接)

shell

复制代码
gcc -o code code2.c -ljpeg -lpng -lminigui -lpthread

嵌入式交叉编译要使用对应平台交叉编译器,注意库路径与头文件。

十、SQLite3 常用 SQL 语句

嵌入式本地存储大量使用 sqlite,建表、改表、删表、查询示例:

sql

复制代码
-- 查询表是否存在
select * from sqlite_master where tbl_name='TM_TOOLS';

-- 给已有表增加字段
ALTER TABLE 'TM_TOOLS' ADD [REMARK] [VARCHAR](500);

-- 创建温度数据表
create table WenDu(ID,stime,val1,val2,val3,val4);

-- 删除测试表
drop table test;

-- 创建带自增主键、默认本地时间的表
create table test (
    [tkid]            integer PRIMARY KEY autoincrement,
    [tktype]          int default 0,
    [tableid]         varchar (50),
    [createdate]      datetime default (datetime('now', 'localtime'))
);
相关推荐
牢姐与蒯2 小时前
Linux进程(三)之进程状态_僵尸孤儿
linux·运维·服务器·ubuntu·c
fanged2 天前
Yocto1--环境搭建和验证
大数据·搜索引擎·嵌入式
捷瑞电子工坊2 天前
FreeRTOS中断管理:从原理到实践(标准库版)
嵌入式·freertos·实时操作系统·任务通知·临界区·中断管理·二值信号量
dozenyaoyida2 天前
LittleFS 嵌入式文件系统机制拆解与某 RISC-V MCU 实测配置
单片机·嵌入式·文件系统·risc-v·littlefs·flash存储
江洋之道3 天前
嵌入式LVGL UI架构实践:MVP分层 + 双链表路由,构建低耦合、易维护的嵌入式界面
c语言·架构·嵌入式·lvgl
小柯博客3 天前
01 · 点亮 STM32MP25 的硬件视频编解码:VPU 与那些“安静“的坑
c语言·笔记·stm32·单片机·嵌入式硬件·嵌入式·视频编解码
捷瑞电子工坊4 天前
FreeRTOS事件组:多任务同步的利器
stm32·嵌入式·freertos·实时操作系统·标准外设库·事件组·任务同步
小嵌同学5 天前
Linux 内核中的 Per-CPU 机制详解
linux·运维·arm开发·嵌入式
jufeng13075 天前
【系列:uC/OS-II 内核源码精读:从 6736 行代码看懂一个 RTOS · 第 3 篇】
嵌入式·实时操作系统·rtos·uc/os-ii
禅口魔心5 天前
RK3576开发——Docker部署
docker·嵌入式linux