1-公司板子实践记录
编译uboot
- cd Hi3519DV500_SDK_V1.0.1.1/open_source
- tar xf u-boot-2022.07.tar.bz2 -> cd u-boot-2022.07 -> patch -p1 < ../u-boot-2022.07.patch -> make ARCH=arm CROSS_COMPILE=aarch64-v01c01-linux-gnu- hi3519dv500_defconfig (仅用于 spi nor/nand flash) // 如果已经全部编译过了,就不用执行这一行了
- make ARCH=arm CROSS_COMPILE=aarch64-v01c01-linux-gnu- menuconfig
- make ARCH=arm CROSS_COMPILE=aarch64-v01c01-linux-gnu- -j 20
- make -C ../../gzip/ -> cp ../../gzip/bin/gzip arch/arm/cpu/armv8/hi3519dv500/hw_compressed/ -rf -> chmod +x arch/arm/cpu/armv8/hi3519dv500/hw_compressed/gzip // 这是加了一个 gzip , 不需要的话,这一行也不用执行
- make ARCH=arm CROSS_COMPILE=aarch64-v01c01-linux-gnu- u-boot-z.bin // open_source/uboot/u-boot-2022.07下生成的u-boot-hi3519dv500.bin 即为非安全镜像的子镜像
-
cd components/gsl # 是smp/a55_linux/source/bsp 目录下的 make clean make cd - cp components/gsl/pub/gsl.bin ./tools/pc/image_tool/input cp ../../../../open_source/u-boot/u-boot-2022.07/u-boot-hi3519dv500.bin ./tools/pc/image_tool/input/u-boot-original.bin cp tools/pc/boot_tools/reg_info.bin ./tools/pc/image_tool/input cd ./tools/pc/image_tool python oem/oem_quick_build.py # tools/pc/image_tool/image/oem/下生成的boot_image.bin即为“非安全启动”使用的Boot Image。
自定义
- rootfs 改为 64M :
- sdk/Hi3519DV500_SDK_V1.0.1.1/smp/a55_linux/source/bsp/tools/pc/uboot_env/env_text/hi3519dv500/nand_env.txt 修改内容:
- bootargs=mem=132928K console=ttyAMA0,115200 clk_ignore_unused root=ubi0:ubifs rootfstype=ubifs rw ubi.mtd=4 mtdparts=nand:512K(boot),512K(env),512K(bl31),13M(kernel),64M(rootfs)
- sdk/Hi3519DV500_SDK_V1.0.1.1/smp/a55_linux/source/bsp/tools/pc/uboot_env$ make ENVTXT=env_text/hi3519dv500/nand_env.txt
- 会生成 env.bin 和 burn_table.xml 替换掉原本的
- sdk/Hi3519DV500_SDK_V1.0.1.1/smp/a55_linux/source/bsp/tools/pc/ubi_sh$ ./mkubiimg.sh 3519dv500-2 2k 128k ../../../pub/rootfs_glibc_arm64 64M ../../../pub/bin/pc
- sdk/Hi3519DV500_SDK_V1.0.1.1/smp/a55_linux/source/bsp/tools/pc/uboot_env/env_text/hi3519dv500/nand_env.txt 修改内容:
- 打开 usb : sdk/Hi3519DV500_SDK_V1.0.1.1/smp/a55_linux/source/interdrv/sysconfig/pin_mux.h
- #define USB_EN 1
- make clean -> make // sdk/Hi3519DV500_SDK_V1.0.1.1/smp/a55_linux/temp/source/interdrv/sysconfig/sys_config.ko 加载到板端
- 默认设置是千兆网口,改成百兆网口:参考 外围设备驱动 操作指南.pdf -> 1.6 百兆网口适配
- sdk/Hi3519DV500_SDK_V1.0.1.1/open_source/u-boot/u-boot-2022.07/include/configs/hi3519dv500.h
-
#define CONFIG_GMAC_PHY0_ADDR 1 #define CONFIG_GMAC_PHY0_INTERFACE_MODE 1 /* rgmii 2, rmii 1, mii 0 */
-
- sdk/Hi3519DV500_SDK_V1.0.1.1/open_source/linux/linux-5.10.y/arch/arm64/boot/dts/vendor/hi3519dv500-demb.dts
-
&mdio { ethphy: ethernet-phy@1 { reg = <1>; }; }; &gmac { phy-handle = <ðphy>; phy-mode = "rmii"; };
-
- sdk/Hi3519DV500_SDK_V1.0.1.1/open_source/linux/linux-5.10.y/arch/arm64/boot/dts/vendor/hi3516dv500-demb.dts
-
&mdio { ethphy: ethernet-phy@1 { reg = <1>; }; }; &gmac { phy-handle = <ðphy>; phy-mode = "rmii"; };
-
- sdk/Hi3519DV500_SDK_V1.0.1.1/open_source/u-boot/u-boot-2022.07/include/configs/hi3519dv500.h
- uboot 添加新的 flash (海康)
- sdk/Hi3519DV500_SDK_V1.0.1.1/open_source/u-boot/u-boot-2022.07/drivers/mtd/nand/raw/fmc100/fmc_spi_nand_ids.c
fmc_spi_nand_ids.c 新增内容
#1.在 static struct spi_nand_info fmc_spi_nand_flash_table[] 里面新增: #if 1 //添加海康SPI NAND FLASH /* HSESFHCSW1G 1.8V 1G-BIT */ //hgpark { .name = "HSESFHCSW1G", .id = {0xc9, 0x21}, .id_len = 2, .chipsize = _128M, .erasesize = _128K, .pagesize = _2K, .oobsize = 64, .badblock_pos = BBP_FIRST_PAGE, .read = { &read_std(1, INFINITE, 24), &read_fast(1, INFINITE, 88), &read_dual(1, INFINITE, 88), &read_dual_addr(1, INFINITE, 88), &read_quad(1, INFINITE, 88), &read_quad_addr(2, INFINITE, 88), 0 }, .write = { &write_std(0, 256, 88), &write_quad(0, 256, 88), 0 }, .erase = { &erase_sector_128k(0, _128K, 88), 0 }, .driver = &spi_driver_general,// &spi_driver_no_qe, }, /* HSESFHCSW1G 1.8V 1G-BIT */ //hgpark { .name = "HSESFHCSW1G", .id = {0x7C, 0xC1}, .id_len = 2, .chipsize = _128M, .erasesize = _128K, .pagesize = _2K, .oobsize = 64, .badblock_pos = BBP_FIRST_PAGE, .read = { &read_std(1, INFINITE, 24), &read_fast(1, INFINITE, 88), &read_dual(1, INFINITE, 88), &read_dual_addr(1, INFINITE, 88), &read_quad(1, INFINITE, 88), &read_quad_addr(2, INFINITE, 88), 0 }, .write = { &write_std(0, 256, 88), &write_quad(0, 256, 88), 0 }, .erase = { &erase_sector_128k(0, _128K, 88), 0 }, .driver = &spi_driver_general,// &spi_driver_no_qe, }, #endif # 2. 开头添加: set_read_fast(1, INFINITE, 88); set_read_dual(1, INFINITE, 88); set_read_dual_addr(1, INFINITE, 88); set_read_quad(1, INFINITE, 88); set_read_quad_addr(2, INFINITE, 88); set_write_std(0, 256, 88); set_write_quad(0, 256, 88); set_erase_sector_128k(0, _128K, 88);
- sdk/Hi3519DV500_SDK_V1.0.1.1/open_source/u-boot/u-boot-2022.07/drivers/mtd/nand/raw/fmc100/fmc_spi_nand_ids.c
- kerner 添加新的 flash (海康)
- sdk/Hi3519DV500_SDK_V1.0.1.1/open_source/linux/linux-5.10.y/drivers/mtd/nand/fmc100/fmc_spi_nand_ids.c
fmc_spi_nand_ids.c 新增内容
#1.在 static struct spi_nand_info fmc_spi_nand_flash_table[] 里面新增: #if 1 //添加海康SPI NAND FLASH /* HSESFHCSW1G 1.8V 1G-BIT */ //hgpark { .name = "HSESFHCSW1G", .id = {0xc9, 0x21}, .id_len = 2, .chipsize = _128M, .erasesize = _128K, .pagesize = _2K, .oobsize = 64, .badblock_pos = BBP_FIRST_PAGE, .read = { &read_std(1, INFINITE, 24), &read_fast(1, INFINITE, 88), &read_dual(1, INFINITE, 88), &read_dual_addr(1, INFINITE, 88), &read_quad(1, INFINITE, 88), &read_quad_addr(2, INFINITE, 88), 0 }, .write = { &write_std(0, 256, 88), &write_quad(0, 256, 88), 0 }, .erase = { &erase_sector_128k(0, _128K, 88), 0 }, .driver = &spi_driver_general,// &spi_driver_no_qe, }, /* HSESFHCSW1G 1.8V 1G-BIT */ //hgpark { .name = "HSESFHCSW1G", .id = {0x7C, 0xC1}, .id_len = 2, .chipsize = _128M, .erasesize = _128K, .pagesize = _2K, .oobsize = 64, .badblock_pos = BBP_FIRST_PAGE, .read = { &read_std(1, INFINITE, 24), &read_fast(1, INFINITE, 88), &read_dual(1, INFINITE, 88), &read_dual_addr(1, INFINITE, 88), &read_quad(1, INFINITE, 88), &read_quad_addr(2, INFINITE, 88), 0 }, .write = { &write_std(0, 256, 88), &write_quad(0, 256, 88), 0 }, .erase = { &erase_sector_128k(0, _128K, 88), 0 }, .driver = &spi_driver_general,// &spi_driver_no_qe, }, #endif # 2. 开头添加: set_read_fast(1, INFINITE, 88); set_read_dual(1, INFINITE, 88); set_read_dual_addr(1, INFINITE, 88); set_read_quad(1, INFINITE, 88); set_read_quad_addr(2, INFINITE, 88); set_write_std(0, 256, 88); set_write_quad(0, 256, 88); set_erase_sector_128k(0, _128K, 88);
- make ARCH=arm64 CROSS_COMPILE=aarch64-v01c01-linux-gnu- uImage -j 20 // sdk/Hi3519DV500_SDK_V1.0.1.1/open_source/linux/linux-5.10.yarch/arm64/boot/uImage-fdt
- sdk/Hi3519DV500_SDK_V1.0.1.1/open_source/linux/linux-5.10.y/drivers/mtd/nand/fmc100/fmc_spi_nand_ids.c
补充
- i2c_read 等可执行程序路径: Hi3519DV500_SDK_V1.0.1.1/smp/a55_linux/source/bsp/tools/board/reg-tools-1.0.0/bin
- 编译 busybox 然后放到板端 软链接一个 可执行文件 可以直接用: ln -s busybox tftp
- sdk/Hi3519DV500_SDK_V1.0.1.1/smp/a55_linux/source/bsp 相当于 sdk/SS928V100_SDK_V2.0.2.2/osdrv
- 直接 make all -j20 //注意
- makefile : LIB_TYPE ?= glibc BOOT_MEDIA ?= spi
- sdk/Hi3519DV500_SDK_V1.0.1.1/smp/a55_linux/source/bsp/tools/pc/boot_tools: cp hi3519dv500_reg_info.bin reg_info.bin // reg_info.bin 生成非安全 uboot 的时候需要用, 就是配置 ddr ... 的那个 xx.xlsm 文件生成的
- 工具直接 选择 sdk\Hi3519DV500_SDK_V1.0.1.1\smp\a55_linux\source\bsp\pub\hi3519dv500_image_glibc\nand_burn_table.xml 烧录即可
- 直接 make all -j20 //注意
本文来自博客园,作者:封兴旺,转载请注明原文链接:https://www.cnblogs.com/fxw1/p/18572459