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.

分类归档 MCU/MPU/GPU

【RK3568】修改调试串口波特率

一、修改DDR初始化阶段波特率

1、查看配置使用哪个DDR驱动

vim $(RKSDK)/rkbin/RKBOOT/RK3568MINIALL.ini 

由配置文件可知我们使用的 ddr bin 文件是:rk3568_ddr_1560MHz_v1.18.bin

2、修改波特率

修改$(RKSDK)/rkbin/tools/ddrbin_param.txt 波特率参数

3、更新DDR驱动文件


cd $(RKSDK)/rkbin/tools
./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.13.bin //bin文件的名字需要和 RK3568MINIALL.ini 文件中保持一致。

二、修改uboot波特率

vim configs/rk3568_defconfig

三、修改内核波特率(注意此处openwrt系统)

openwrt是直接通过boot.scr获取内核启动地址及其他配置参数的,所以只需要重新更新波特率参数,重新生成boot.scr就可以了。话说boot.scr是由mkimage工具根据boot.cmd参数生成的。

1、创新boot-bsp.cmd文件

# 写入以下内容
#setenv bootargs console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw
#setenv bootm_boot_mode sec
#setenv machid 1029
#load mmc 0:1 0x41000000 uImage
#load mmc 0:1 0x41d00000 script.bin
#bootm 0x41000000

# 第一行setenv命令,设定了变量bootargs(启动参数)为:通过tty0和ttyS0串口输出启动信息;启动失败延迟5秒重启,根文件在TF卡的第二分区,可读写;
# 第二行指定了bootm 模式
# 第三行指定解析设备树
# 第四行指定了将压缩后的内核uImage加载到 0x41000000 的位置
# 第五行指定了将 script.bin 加载到 0x41d00000 的位置
# 第六行为从加载地址启动内核的命令

part uuid mmc ${devnum}:3 uuid
setenv bootargs "console=ttyS2,115200 console=tty2 earlycon=uart8250,mmio32,0xfe660000 root=PARTUUID=${uuid} rw rootwait"

load mmc ${devnum}:2 ${fdt_addr_r} rockchip.dtb
load mmc ${devnum}:2 ${kernel_addr_r} kernel.img

booti ${kernel_addr_r} - ${fdt_addr_r}

2、生成boot.scr文件

./tools/mkimage -C none -A arm -T script -d boot-bsp.cmd boot.scr

【Lx2160】双系统启动设计

一、启动分析

uboot启动后会通过检测lx2160ardb_boot.scr配置文件,实现默认启动引导。此系列芯片引导方式一样。

打开./configs/board/lx2160ardb_rev2/manifest文件分析

vim ./configs/board/lx2160ardb_rev2/manifest
distroboot=\
'env exists dtb || setenv dtb fsl-lx2160a-rdb.dtb;'\
'env exists kernel_image || setenv kernel_image Image;'\
'env exists devpart_boot || setenv devpart_boot 2;'\
'env exists devpart_root || setenv devpart_root 4;'\
'part uuid $devtype $devnum:$devpart_root partuuidr;'\
'setenv bootargs console=ttyAMA0,115200 earlycon=pl011,mmio32,0x21c0000 root=PARTUUID=$partuuidr rw rootwait pci=pcie_bus_perf $othbootargs;'\
'load $devtype $devnum:$devpart_boot $kernel_addr_r $kernel_image;'\
'load $devtype $devnum:$devpart_boot $fdt_addr_r $dtb;'\
'env exists secureboot && echo validating secureboot && run secureboot_validate;'\
'booti $kernel_addr_r - $fdt_addr_r'


distroboot_ima=\
'env exists dtb || setenv dtb fsl-lx2160a-rdb.dtb;'\
'env exists kernel_image || setenv kernel_image Image;'\
'env exists devpart_boot || setenv devpart_boot 2;'\
'env exists devpart_root || setenv devpart_root 4;'\
'part uuid $devtype $devnum:$devpart_root partuuidr;'\
'load $devtype $devnum:$devpart_boot $kernel_addr_r $kernel_image;'\
'load $devtype $devnum:$devpart_boot $fdt_addr_r $dtb;'\
'setenv initramfs_addr_r 0xb0000000; setenv initramfsheader_addr_r 0x80300000;'\
'load $devtype $devnum:$devpart_boot $initramfs_addr_r initramfs.img;'\
'env exists secureboot && echo validating secureboot && run secureboot_validate;'\
'setenv bootargs console=ttyAMA0,115200 earlycon=pl011,mmio32,0x21c0000 root=PARTUUID=$partuuidr rw rootwait pci=pcie_bus_perf $othbootargs;'\
'booti $kernel_addr_r $initramfs_addr_r $fdt_addr_r'

通过分析配置文件,发现Linux和rootfs的引导取决于devpart_boot和devpart_root两个变量,所以通过修改这两个变量值,便可动态实现,分区引导切换。

二、手动引导切换

进入uboot命令行

setenv devpart_boot  2
setenv devpart_root  4
saveenv

2和4代表分区号

三、动态引导切换

如实现动态引导切换需要通过fw_env工具实现。请参照《fw-env开启文件系统设置uboot环境变量》http://www.recologypower.com:9080/?p=1247

四、分区处理

flex-installer -i pf -p 6P=200M:1536M:128M:13G:1536M:-1 -d /dev/sdx

五、烧录程序

【lx2160】fw-env开启文件系统设置uboot环境变量

1、进入uboot修改源码

vim include/configs/lx2160a_common.h

最后增加

/*Begin:add by zhaobaoxing for env*/
#define CONFIG_SYS_MMC_ENV_DEV          0
#define CONFIG_ENV_SIZE                 0x2000          /* 8KB */
#define CONFIG_ENV_SECT_SIZE            0x20000
#define CONFIG_ENV_OFFSET               0x500000
#define CONFIG_ENV_ADDR                 (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
/*End:add by zhaobaoxing for env*/

2、修改fw_env.config文件

# Configuration file for fw_(printenv/setenv) utility.
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
# Futhermore, if the Flash sector size is omitted, this value is assumed to
# be the same as the Environment size, which is valid for NOR and SPI-dataflash
# Device offset must be prefixed with 0x to be parsed as a hexadecimal value.

# NOR example
# MTD device name       Device offset   Env. size       Flash sector size       Number of sectors
#/dev/mtd1              0x0000          0x4000          0x4000
#/dev/mtd2              0x0000          0x4000          0x4000

# MTD SPI-dataflash example
# MTD device name       Device offset   Env. size       Flash sector size       Number of sectors
#/dev/mtd5              0x4200          0x4200
#/dev/mtd6              0x4200          0x4200

# NAND example
#/dev/mtd0              0x4000          0x4000          0x20000                 2

# On a block device a negative offset is treated as a backwards offset from the
# end of the device/partition, rather than a forwards offset from the start.

# Block device example
/dev/mmcblk0            0x500000                0x2000
#/dev/mmcblk0           -0x20000        0x20000

# VFAT example
#/boot/uboot.env        0x0000          0x4000

# UBI volume
#/dev/ubi0_0            0x0             0x1f000         0x1f000
#/dev/ubi0_1            0x0             0x1f000         0x1f000

# UBI volume by name
#/dev/ubi0:env          0x0             0x1f000         0x1f000
#/dev/ubi0:env-redund   0x0             0x1f000         0x1f000
~

【光猫】北京移动最新吉比特H3-2S光猫获取超级管理密码,改桥接必备

1.使用光猫背后的普通用户名登录进光猫,浏览器复制以下链接打开

http://192.168.1.1/usr=CMCCAdmin&psw=aDm8H%25MdA&cmd=1&telnet.gch

2.通过telnet进入光猫

输入:telnet 192.168.1.1
用户名、密码如下:
CMCCAdmin
aDm8H%MdA

3.查看一下登陆信息,可以看到账号密码全部进行了加密

sidbg 1 DB p DevAuthInfo

以下内容为正常显示:

<Tbl name="DevAuthInfo" RowCount="2">
<Row No="0">
<DM name="ViewName" val="IGD.AU1"/>
<DM name="Enable" val="1"/>
<DM name="IsOnline" val="0"/>
<DM name="AppID" val="1"/>
<DM name="User" val="******"/>
<DM name="Pass" val="******"/>
<DM name="Level" val="1"/>
<DM name="Extra" val=""/>
<DM name="ExtraInt" val="0"/>
</Row>
<Row No="1">
<DM name="ViewName" val="IGD.AU2"/>
<DM name="Enable" val="1"/>
<DM name="IsOnline" val="0"/>
<DM name="AppID" val="1"/>
<DM name="User" val="******"/>
<DM name="Pass" val="******"/>
<DM name="Level" val="2"/>
<DM name="Extra" val=""/>
<DM name="ExtraInt" val="0"/>
</Row>
</Tbl> 

4.修改CMCCAdmin的登陆密码

sidbg 1 DB set DevAuthInfo 0 Pass admin

5.保存

sidbg 1 DB save 

6.使用账户正常登录光猫即可

CMCCAdmin
admin

7.指令集

#列出所有表

sidbg 1 DB p all

#查看 TELNET 信息

sidbg 1 DB p TelnetCfg

#查看 查看用户 信息

sidbg 1 DB p DevAuthInfo



修改管理员超级账号为 CMCCAdmin (可自定义)

sidbg 1 DB set DevAuthInfo 0 User CMCCAdmin



修改管理员超级账号的密码 aDm8H%MdA (可自定义)

sidbg 1 DB set DevAuthInfo 0 Pass aDm8H%MdA



修改配置 永久 开启 TELNET

#开启TELNET

sidbg 1 DB set TelnetCfg 0 TS_Enable 1

#开放TELNET LAN端口

sidbg 1 DB set TelnetCfg 0 Lan_Enable 1



#关闭TELNET

sidbg 1 DB set TelnetCfg 0 TS_Enable 0

#关闭TELNET LAN端口

sidbg 1 DB set TelnetCfg 0 Lan_Enable 0



#修改TELNET账号 改为 root (可自定义)

sidbg 1 DB set TelnetUser 0 Username root

#修改TELNET密码 改为 admin (可自定义)

sidbg 1 DB set TelnetUser 0 Password admin



#修改TELNET账号 改为 root (可自定义)

sidbg 1 DB set TelnetUser 1 Username root

#修改TELNET密码 改为 admin (可自定义)

sidbg 1 DB set TelnetUser 1 Password admin



#记得最好保存下配置

sidbg 1 DB save 

8.配置桥接模式

找到网络里面 Internet连接  把没用的连接拍照记录vlan id后都删除,重新建立一个vlan id=10的 bridge即可

注意一般2口是IPTV 不要选中

【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,就会跳转到出错之前的函数处,仔细查看这部分函数被调用或者数组内存使用情况。

【LX2160】加密引擎开启

由于NXP为LX2160增加了硬件加密引擎与openssl接口,我们可以直接编译使用openssl API接口。

1、编译:

$ cd flexbuild
$ source setup.env
Build cryptodev-linux:
$ flex-builder -c cryptodev_linux -a arm64 # automatically setup cross-toolchain and fetch 
cryptodev-linux repository to build
Build OpenSSL:
$ flex-builder -c openssl -a arm64
Merge OpenSSL and cryptodev-linux components into target rootfs:
$ flex-builder -i merge-component -a arm64
Generate bootpartition tarball:
$ flex-builder -i mkbootpartition -a arm64
   flex-builder -i mkbootpartition -a arm64 -m lx2160ardb_rev2 -b sd

2、配置:

cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
修改为:
#include /etc/ld.so.conf.d/*.conf
# libc default configuration
/usr/local/lib
# Multiarch support
/usr/local/lib/aarch64-linux-gnu
/lib/aarch64-linux-gnu
/usr/lib/aarch64-linux-gnu
/usr/lib/aarch64-linux-gnu/libfakeroot

3、加载模块

user@localhost:~$ sudo modprobe cryptodev
[sudo] password for user:

user@localhost:~$ ls /dev/crypto
/dev/crypto

user@localhost:~$ openssl engine
(devcrypto) /dev/crypto engine
(dynamic) Dynamic engine loading support

4、Verify the CAAM offloading

Hardware operations can be monitored with the interrupt counters for CAAM JR and QI (DPAA1 and DPAA2) interfaces.

user@localhost:~$ cat /proc/interrupts | grep jr
78: 20 0 0 0 GICv2 103 Level 1710000.jr
79: 0 0 0 0 GICv2 104 Level 1720000.jr
80: 0 0 0 0 GICv2 105 Level fsl-jr0

user@localhost:~$ openssl enc -aes-256-cfb -k secret -P -md sha1
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
salt=233157F098D1B0E8
key=D2B0C0C088AA7DAA6CF37CC856E283E3B0C3DD2BE155688DE18593EB3F997776
iv =A4E2C86E0DBA1211B5A4B02EBEFF6DC4

user@localhost:~$ cat /proc/interrupts | grep jr
78: 54 0 0 0 GICv2 103 Level 1710000.jr
79: 69 0 0 0 GICv2 104 Level 1720000.jr
80: 0 0 0 0 GICv2 105 Level fsl-jr0

5、DPDK加解密接口测试