当前位置: 首页 > news >正文

hi3559AV100调试记录

文章目录

    • 1.uboot下环境变量设置
      • 网络相关设置
      • kernel启动参数相关
      • ping主机失败,phy link失败
    • 2.kernel
      • 分区
      • 设备树地址
      • 以太网卡驱动
      • 开机自动运行相关设置
      • GPIO
        • 参考
        • 1. himm设置gpio
        • 2. 内核态(驱动)控制gpio
        • 3. 控制台设置gpio
        • 4. 应用层设置gpio
      • wifi
    • 3.tools
      • menuconfig
      • tftp
      • himm
    • 4.程序
      • 驱动
      • 应用
      • 使用

1.uboot下环境变量设置

网络相关设置

setenv gatewayip 10.173.154.1
setenv ipaddr 10.173.154.35
setenv netmask 255.255.254.0
setenv serverip 10.173.154.37
saveenv

kernel启动参数相关

setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(boot),10M(kernel),100M(rootfs),51200M(data)'
setenv bootcmd 'mmc read 0x0 0x44000000 0x800 0x5000;bootm 0x44000000'
saveenv
51200M(data)是需要挂载的盘的大小,根据你的emmc的大小来设定,
更快捷的是再制作文件系统的时候就设定好文件系统大小,这样就不用挂载了

ping主机失败,phy link失败

phy芯片不通的问题找到了 2022/08/27
1. 板子上的phy芯片是A1版本,是有问题的,重新焊接换成A2版本之后,link就通了
2.因为板子的phy是1000M slave模式,所以转接板需要设置成 1000M master模式
3. uboot下只能 uboot去ping主机,主机没法ping demo板 ,因为uboot驱动只做了发送ping命令的处理,没有写收到ping命令的处理
4.uboot ping通主机,需要再网线全部连接的情况下,先禁用主机的以太网,然后重新启动,不然也不行

2.kernel

分区

1. 查看分区:
Cd /dev
Cat mmcblk0p
会出现mmcblk0p1 mmcblk0p2 mmcblk0p3 mmcblk0p4 4个分区。
前三个分区分别为uboot kernel 文件系统(uboot下的启动命令),那么mmcblk0p4可作为用户分区

2. 格式化mmcblk0p4
cd /
mkfs.ext4 /dev/mmcblk0p4
3. 分区挂载:
mkdir data
mount /dev/mmcblk0p4 /data -t ext4

设备树地址

osdrv/opensource/kernel/linux-4.9.y_multi-core/arch/arm64/boot/dts/hisilicon/hi3559av100-demb.dts

以太网卡驱动

参考链接: linux 以太网卡驱动

根据实际phy地址修改设备树中phy地址
&mdio {
        ethphy: ethernet-phy@5 {
                reg = <5>;
        };
};
Hi3559AV100_SDK_V2.0.3.1/osdrv/opensource/kernel/linux-4.9.y_multi-core/drivers/net/phy
如果要修改适配phy芯片,可以直接修改
phy_device.c

开机自动运行相关设置

vi /etc/init.d/rcS
永久设置IP
ifconfig eth0 10.173.154.35 netmask 255.255.254.0
route add default gw 10.173.154.1

// 自动挂载/dev/mmcblk0p4
mount /dev/mmcblk0p4 /data -t ext4

// wifi相关,需要内核配置wifi
insmod /data/wifi/cfg80211.ko
insmod /data/wifi/mac80211.ko
insmod /data/wifi/88x2cs.ko
/data/wifi/hostapd /data/wifi/hostapd.conf &
ifconfig wlan0 192.168.1.1
// 这句先不要自动启用,不然串口退不出,被这个程序占用? ctl+c
# /data/wifi/udhcpd -fS /data/wifi/udhcpd.conf

//启动mpp业务  不然i2c等无法运行
cd /usr/lib
./load3559av100_multicore -i -sensor0 imx477 -sensor1 imx477

// 设置gpio输出
# gpio3-6 reset_N 
cd /sys/class/gpio
echo 30 > export
cd gpio30
echo out > direction
echo 1 > value

# gpio4-2 1.2V 
cd /sys/class/gpio
echo 34 > export
cd gpio34
echo out > direction
echo 1 > value

# gpio2-7 1.8V 
cd /sys/class/gpio
echo 25 > export
cd gpio25
echo out > direction
echo 1 > value

# gpio4-7 2.8V 
cd /sys/class/gpio
echo 39 > export
cd gpio39
echo out > direction
echo 1 > value

// 第一次装机时,需要进行软连接
ln -s  /data/wifi/libnl-3.so.200.20.0 /lib64/libnl-3.so.200
ln -s  /data/wifi/libnl-genl-3.so.200.20.0  /lib64/libnl-genl-3.so.200

GPIO

参考

HI3559AV100 GPIO配置和操作(一)
gpio每个port有8个管脚

参考ReleaseDoc\zh\00.hardware\chip下的
Hi3559A╱C V100 ultra-HD Mobile Camera SoC 用户指南.pdf
Hi3559AV100_PINOUT_CN.xlsx

1. himm设置gpio

先设置复用 查询excel
himm 0x1F000004 0x000041F0
再设置方向 offset 0x400
himm 0x12151400  0x1  // 设置gpio17_1为输出
在设置值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nG7uRMVx-1662199935454)(http://image.huawei.com/tiny-lts/v1/images/b3043cb3ef4b51d5020e998af3573f42_1916x611.png@900-0-90-f.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkORyz2q-1662199935455)(http://image.huawei.com/tiny-lts/v1/images/e1c7f92c1b57891fe39484375a2b2e6e_1045x646.png@900-0-90-f.png)]

2. 内核态(驱动)控制gpio

此操作示例在内核态下实现对GPIO的读写操以及GPIO中断操作。
内核态GPIO读写操作示例
操作示例如下:
步骤 1 注册GPIO:
gpio_request(gpio_num, NULL);

每组GPIO有8个GPIO管脚。
参数gpio_num为要操作的GPIO编号,该编号等于GPIO组号 * 8 + 组内偏移号,例如GPIO4_2的编号为4 * 8 + 2 = 34
步骤 2 设置GPIO方向:
对于输入:gpio_direction_input(gpio_num)
对于输出:gpio_direction_output(gpio_num, gpio_out_val)

如果是输出,需要设置一个输出的初始值,参数gpio_out_val为输出时的初始值。
步骤 3 查看GPIO输入值或设置GPIO输出值:
查看输入值:gpio_get_value(gpio_num);
输出低:gpio_set_value(gpio_num, 0);
输出高:gpio_set_value(gpio_num, 1);

输入值为gpio_get_value(gpio_num)的返回值。
步骤 4 释放注册的GPIO编号:
gpio_free(gpio_num);

3. 控制台设置gpio

cd /sys/class/gpio
echo 26 > export
cd gpio26
echo out > direction
echo 1 > value
cat value
ps: 方向只有in 和 out

4. 应用层设置gpio

此操作示例在用户态下实现对GPIO的读写操作。
步骤 1	将要操作的GPIO编号export:
fp = fopen("/sys/class/gpio/export", "w");
fprintf(fp, "%d", gpio_num);
fclose(fp);

每组GPIO有8个GPIO管脚。
参数gpio_num为要操作的GPIO编号,该编号等于GPIO组号 * 8 + 组内偏移号,例如GPIO4_2的编号为4 * 8 + 2 = 34。
步骤 2	设置GPIO方向:
fp = fopen("/sys/class/gpio/gpio%d/direction", "rb+");
对于输入:fprintf(fp, "in");
对于输出:fprintf(fp, "out");
fclose(fp);
步骤 3	查看GPIO输入值或设置GPIO输出值:
fp = fopen("/sys/class/gpio/gpio%d/value", "rb+");
查看输入值:fread(buf, sizeof(char), sizeof(buf) - 1, fp);
输出低:
strcpy(buf,"0");
fwrite(buf, sizeof(char), sizeof(buf) - 1, fp);
输出高:
strcpy(buf,"1");
fwrite(buf, sizeof(char), sizeof(buf) - 1, fp);
步骤 4	将操作的GPIO编号unexport:
fp = fopen("/sys/class/gpio/unexport", "w");
fprintf(fp, "%d", gpio_num);
fclose(fp);

wifi

天工测控WG225 WIFI&BT RTL8821CS海思平台hi3559av100移植
Hi3559A添加WiFi模块
Hi3559AV100 TL8189FS WIFI调试

启用sdio,添加cap-sdio-irq
&mmc3 {
        status = "okay";
        cap-sdio-irq;
};
cd Hi3559AV100_SDK_V2.0.3.1/osdrv/opensource/kernel/linux-4.9.y_multi-core
make menuconfig

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cvunzLhT-1662199935455)(http://image.huawei.com/tiny-lts/v1/images/012d4556eb194f033c47924c24938b04_1544x469.png@900-0-90-f.png)]

3.tools

menuconfig

使用make menuconfig配置defconfig
linux kernel: defconfig和.config

  1 cd kernel/linux-4.9
  2 make mrproper     //该命令是是清除.config的配置
  3 cp arch/arm64/configs/hi3559av100_arm64_big_little_emmc_defconfig .config

  4  make ARCH=arm64 menuconfig
  5 在配置所需要的开关后,执行 cp .config arch/arm64/configs/hi3559av100_arm64_big_little_emmc_defconfig,
  6 make mrproper
 ps:需要严格按照2-6步骤执行,不然会编译出错
正确使用和保存deconfig的流程:
1. 要修改在arch/arm/configs下的文件xxx_defconfig
2. make ARCH=arm64 xxx_defconfig 会生成.config文件
3. make ARCH=arm64 menuconfig 修改配置后保存
4. make ARCH=arm64 savedefconfig 生成defconfg文件
5. cp defconfig arch/arm/configs/xxx_defconfig 保存
这样保存的defconfig文件,配置最小化,且日后能恢复成.config。
————————————————
版权声明:本文为CSDN博主「hello_courage」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012247418/article/details/105347429

tftp

1 设置服务器
主机上设置目录,然后启动tftp
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tAkIKmec-1662199935456)(http://image.huawei.com/tiny-lts/v1/images/3f09cb2ad658584c0965910b25c35550_1909x302.png@900-0-90-f.png)]
2 上传下载文件

demo板获取主机目录下的文件
tftp -g 10.173.154.37  -r himm -b 2048

demo板上传本地文件到服务器目录
tftp -p 10.173.154.37  -r himm -b 2048

ps:
-b 2048 是告诉文件大小小于2048
-r 文件名称

himm

himm工具说明
海思提供的himm工具,能在linux命令行中,直接对gpio进行操作,对于调试来说非常方便
https://blog.csdn.net/whitefish520/article/details/107709573

源码目录地址
Hi3559AV100_SDK_V2.0.3.1/osdrv/tools/board/reg-tools-1.0.0$
make 编译

4.程序

驱动

1.Makefile

obj-m := st-avatar.o
# obj-m := txl_char.o
# KERNELDIR := /lib/modules/$(shell uname -r)/build
KERNELDIR := /share/taoxiaoli/hi3559/Hi3559AV100_SDK_V2.0.3.1/osdrv/opensource/kernel/linux-4.9.y_multi-core/
PWD := $(shell pwd)
modules:
		$(MAKE) -C $(KERNELDIR) M=$(PWD) modules ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux-
		# $(MAKE) -C $(KERNELDIR) M=$(PWD) modules ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
clean:
		$(MAKE) -C $(KERNELDIR) M=$(PWD) clean ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux-
clean2:
		rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.mod *.symvers *.order

应用

  1. build
aarch64-himix100-linux-gcc main.c

使用

./load3559av100_multicore -i -sensor0 imx477 -sensor1 imx477
./himm 0x1F000004 0x000041F0
./himm 0x1F000010 0x000041F0
./himm 0x1F000014 0x000041F0
./himm 0x1F000018 0x000041F0
./himm 0x1F000020 0x000041F0
./himm 0x1F000028 0x000041F0
./himm 0x1F00004C 0x000041F0
./himm 0x1F0000B0 0x000041F0
./himm 0x1F000098 0x000041F0
./himm 0x1F00007C 0x000041F0
./himm 0x1F0000B4 0x000041F0
./himm 0x1F000068 0x000000F1
./himm 0x1F00006C 0x000000F1
./himm 0x1F000070 0x000010F1
./himm 0x1F000074 0x000000F1
./himm 0x1F000078 0x000000F1
./himm 0x1F0010C8 0x000000F1
./himm 0x1F0010CC 0x000000F1
./himm 0x1F0010D0 0x000010F1
./himm 0x1F0010E0 0x000000F1

相关文章:

  • Qt5开发从入门到精通——第四篇(电子钟)
  • Vue项目搭建基础流程
  • 猿创征文|Aixos的引入与基本使用
  • 0903(046天 线程集合总结01)
  • fatal: Unable to create ‘D:/git/2_wechat/.git/index.lock‘: File exists.
  • 网络安全原理与实践学习笔记——设计DMZ
  • 【牛客刷题】带你在牛客刷题第五弹(简单排序)
  • Fragment切换的方式介绍和一些问题的解决
  • 性能优化之图片懒加载
  • Linux多线程篇【5】——线程池
  • 指针成员操作符
  • python中应对各种机制
  • css实现时钟
  • “蔚来杯“2022牛客暑期多校训练营8 补题题解(F)
  • 【数据结构与算法】之深入解析“解出数学表达式的学生分数”的求解思路与算法示例
  • 【译】JS基础算法脚本:字符串结尾
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Consul Config 使用Git做版本控制的实现
  • cookie和session
  • Docker容器管理
  • Docker下部署自己的LNMP工作环境
  • ES2017异步函数现已正式可用
  • JAVA之继承和多态
  • learning koa2.x
  • Next.js之基础概念(二)
  • oldjun 检测网站的经验
  • yii2中session跨域名的问题
  • 大整数乘法-表格法
  • 关于extract.autodesk.io的一些说明
  • 京东美团研发面经
  • 人脸识别最新开发经验demo
  • 因为阿里,他们成了“杭漂”
  • 走向全栈之MongoDB的使用
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (12)目标检测_SSD基于pytorch搭建代码
  • (27)4.8 习题课
  • (zt)最盛行的警世狂言(爆笑)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (过滤器)Filter和(监听器)listener
  • (汇总)os模块以及shutil模块对文件的操作
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (一)基于IDEA的JAVA基础10
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net refrector
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 提取注释生成API文档 帮助文档
  • .net流程开发平台的一些难点(1)
  • /dev/sda2 is mounted; will not make a filesystem here!
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)