hi3559AV100调试记录

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值