• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
    
    • 1
    • 2
    • 3
    51200M(data)是需要挂载的盘的大小,根据你的emmc的大小来设定,
    更快捷的是再制作文件系统的时候就设定好文件系统大小,这样就不用挂载了
    
    • 1
    • 2

    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通主机,需要再网线全部连接的情况下,先禁用主机的以太网,然后重新启动,不然也不行
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    设备树地址

    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>;
            };
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    Hi3559AV100_SDK_V2.0.3.1/osdrv/opensource/kernel/linux-4.9.y_multi-core/drivers/net/phy
    如果要修改适配phy芯片,可以直接修改
    phy_device.c
    
    • 1
    • 2
    • 3

    开机自动运行相关设置

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    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
    • 2
    • 3
    1. himm设置gpio
    先设置复用 查询excel
    himm 0x1F000004 0x000041F0
    再设置方向 offset 0x400
    himm 0x12151400  0x1  // 设置gpio17_1为输出
    在设置值
    
    • 1
    • 2
    • 3
    • 4
    • 5

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    3. 控制台设置gpio
    cd /sys/class/gpio
    echo 26 > export
    cd gpio26
    echo out > direction
    echo 1 > value
    cat value
    ps: 方向只有in 和 out
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    wifi

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

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

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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步骤执行,不然会编译出错
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    正确使用和保存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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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 文件名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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 编译
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    
    
    • 1

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    应用

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

    使用

    ./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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    清华学霸告诉你:如何自学人工智能?
    椭圆曲线点加的应用计算
    揭开 Amazon Bedrock 的神秘面纱 | 基础篇
    想冲宇宙厂,直接挂了。。。
    训练yolov5时出现RuntimeError: CUDA out of memory
    Python+Requests+Pytest+YAML+Allure实现接口自动化
    探索TiDB Lightning源码来解决发现的bug
    OpenCV实战之人脸美颜美型算法
    Linux 基础入门
    【C++进阶(八)】C++继承深度剖析
  • 原文地址:https://blog.csdn.net/u010548772/article/details/126680729