15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

归档标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

月度归档 1月 18, 2023

【DTB】设备树解、压包

1、安装工具链

sudo apt-get install device-tree-compiler

2、解包dtb->dts

dtc -I dtb -O dts -o xxx.dts xxx.dtb

3、压包dts->dtb

dtc -I dts -O dtb -o xxx.dtb xxx.dts

【ARMBIAN】系统忘记root密码后如何重置

arm系统不同于x86服务器,可能是因为外设驱动的问题,无法在启动阶段通过编辑grub进入单用户模式而得以修改root的密码。所以,可如下操作:

1、用其他外置启动盘启动系统,通常是U盘

2、挂载原系统(在eMMC)上的文件系统的 /etc目录

3、vi该目录下的shadow,删除其中root之后两个冒号之间的加密密码

4、保存、退出vi,sync并且shutdown系统

5、拔除外置启动盘,重加电启动原系统

6、此时root已无需密码即可登录,登录后及时passwd修改密码

【机顶盒】S905系列芯片无法优盘/TF卡启动

1、找到USB转TTL模块,连接主板TTL排针,具体排针定义请自行百度,或者留言询问。

2、打开xshell软件,连接USB转TTL模块,波特率大多115200,可以多试几个。之后上电,一直按空间。进入boot指令模式。

3、修改环境变量

setenv bootfromrecovery 0
setenv bootfromnand 0
setenv start_mmc_autoscript 'if fatload mmc 0 11000000 s805_autoscript; then autoscr 11000000; fi;'
setenv start_usb_autoscript "if fatload usb 0 11000000 s805_autoscript; then autoscr 11000000; fi; if fatload usb 1 11000000 s805_autoscript; then autoscr 11000000; fi;"
setenv start_autoscript 'if usb start; then run start_usb_autoscript; fi; if mmcinfo; then run start_mmc_autoscript; fi;'
setenv bootcmd 'run start_autoscript; run storeboot'
saveenv

4、手动启动优盘引导或者TF卡引导。

run bootcmd 

5、异常处理

如果bootcmd修改未生效,可以更改为其他名字。

【STM32】硬件错误的调试技巧

在用Keil对STM32的程序进行仿真时程序有时会跑飞,停止仿真程序会停在HardFault_Handler函数里的死循环while(1)中。

STM32出现硬件错误可能有以下原因:

  1. 数组越界操作;
  2. 内存溢出,访问越界;
  3. 堆栈溢出,程序跑飞;
  4. 中断处理错误;

定位方法一

在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击STOP停止仿真。

1、在Keil菜单栏点击View——Registers Window

在寄存器查看窗口查找R14(LR)的值。如果R14(LR) = 0xFFFFFFE9,继续查看MSP(主堆栈指针)的值;如果R14(LR) = 0xFFFFFFFD,继续查看PSP(进程栈指针)的值。

介绍程序R14(LR) = 0xFFFFFFF9实例如下:

2、在Keil菜单栏点击“View”—“Memory Windows”—“Memory1”

在“Address”地址栏中输入MSP的值:0x20001288,然后在对应的行里找到地址。地址一般以0x08开头的32位数。本例中,地址为0x08003CB9。

3、在Keil菜单栏点击View——Disassembly Window

在Disassembly窗口中右击,在下拉菜单中选择Show Disassemblyat Address…。在弹出框Show Code atAdress的地址框中输入地址0x08003CB9进行搜索,然后就会找到相对应的代码。这里的代码就是进入循环中断之前的情况。仔细查看附近区域的相关代码来排查错误具体原因。

定位方法二

1、在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真。

2、在Keil菜单栏点击View——Call Stack Window

弹出Call Stack + Locals对话框。然后在对话框中右键选择Show Caller Code,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况。