[Linux 底层]U-boot ksz9031网络驱动调试

本文介绍了如何在Linux U-boot环境下调试ksz9031千兆网络芯片的驱动程序。从uboot配置、硬件参数、设备树修改到网卡初始化流程,详细阐述了ksz9031驱动的注册与配置步骤,帮助开发者理解驱动工作原理。
摘要由CSDN通过智能技术生成

ksz9031的介绍可以回归一下datasheet的介绍,一款很优秀的千兆以太网;

【Datasheet】PHY KSZ9031千兆网络芯片解读

系统版本:Ubuntu18.04-64

编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)

uboot版本:2018.07 -linux4sam_6.0

板子型号:at91sama5d3x-xplained

MCU型号:sama5d36

关注微信公众号,回复“ksz9031驱动”,免费下载ksz9031的驱动源代码。

硬件参考图如下:

在这里插入图片描述

1、uboot官网开发板默认配置文件路径

//默认配置路径
u-boot-at91-u-boot-2018.07-at91/configs/sama5d3_xplained_nandflash_defconfig

//指定交叉编译器
$ export CROSS_COMPILE=arm-linux-gnueabi-

//先编译默认配置
$ make sama5d3_xplained_nandflash_defconfig
$ make

2、公共信息配置

//配置文件
include/configs/at91-sama5_common.h

//从Nand Flash启动
#ifdef CONFIG_NAND_BOOT
/* u-boot env in nand flash */
#define CONFIG_ENV_OFFSET 0x140000
#define CONFIG_ENV_OFFSET_REDUND 0x100000
#define CONFIG_ENV_SIZE 0x20000

//从Nand Flash读取内核到内存中,跳转到内核

#if 0    /*Jack*/
#define CONFIG_BOOTCOMMAND        "nand read 0x21000000 0x180000 0x80000;"    \
                    "nand read 0x22000000 0x200000 0x600000;"   \
                    "bootz 0x22000000 - 0x21000000"
//修改为通过网络下载内核和设备树文件到内存,同样可以启动跳转到内核,方便开发调试内核使用
#else
#define CONFIG_BOOTCOMMAND        "tftp 0x21000000 at91-sama5d3_xplained.dtb;"    \
                    "tftp 0x22000000 zImage;"   \
                    "bootz 0x22000000 - 0x21000000"
#endif

3、开发板配置信息

//开发板配置信息文件
include/configs/sama5d3_xplained.h

//DDR地址
//NAND Flash地址
//NAND FLASH的硬件属性,如果更改了芯片料,这部分要仔细核对参数PMECC

/* SDRAM */
#define CONFIG_NR_DRAM_BANKS 1
#define CONFIG_SYS_SDRAM_BASE 0x20000000
#define CONFIG_SYS_SDRAM_SIZE 0x10000000

#ifdef CONFIG_SPL_BUILD
#define CONFIG_SYS_INIT_SP_ADDR 0x318000
#else
#define CONFIG_SYS_INIT_SP_ADDR
(CONFIG_SYS_SDRAM_BASE + 16 * 1024 - GENERATED_GBL_DATA_SIZE)
#endif

/* NAND flash /
#ifdef CONFIG_CMD_NAND
#define CONFIG_NAND_ATMEL
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_BASE 0x60000000
/
our ALE is AD21 /
#define CONFIG_SYS_NAND_MASK_ALE (1 << 21)
/
our CLE is AD22 */
#define CONFIG_SYS_NAND_MASK_CLE (1 << 22)
#define CONFIG_SYS_NAND_ONFI_DETECTION

#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#endif
/* PMECC & PMERRLOC */
#define CONFIG_ATMEL_NAND_HWECC
#define CONFIG_ATMEL_NAND_HW_PMECC
#define CONFIG_PMECC_CAP 4
#define CONFIG_PMECC_SECTOR_SIZE 512

/* USB */

#ifdef CONFIG_CMD_USB
#define CONFIG_USB_ATMEL
#define CONFIG_USB_ATMEL_CLK_SEL_UPLL
#define CONFIG_USB_OHCI_NEW
#define CONFIG_SYS_USB_OHCI_CPU_INIT
#define CONFIG_SYS_USB_OHCI_REGS_BASE 0x00600000
#define CONFIG_SYS_USB_OHCI_SLOT_NAME “SAMA5D3 Xplained”
#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2
#endif

#define CONFIG_SYS_LOAD_ADDR 0x22000000 /* load address */

/* SPL */
#define CONFIG_SPL_TEXT_BASE 0x300000
#define CONFIG_SPL_MAX_SIZE 0x18000
#define CONFIG_SPL_BSS_START_ADDR 0x20000000
#define CONFIG_SPL_BSS_MAX_SIZE 0x80000
#define CONFIG_SYS_SPL_MALLOC_START 0x20080000
#define CONFIG_SYS_SPL_MALLOC_SIZE 0x80000

#define CONFIG_SYS_MONITOR_LEN (512 << 10)

#ifdef CONFIG_SD_BOOT
#define CONFIG_SYS_MMCSD_FS_BOOT_PARTITION 1
#define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME “u-boot.img”

#elif CONFIG_NAND_BOOT
#define CONFIG_SPL_NAND_DRIVERS
#define CONFIG_SPL_NAND_BASE
#endif
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x40000
#define CONFIG_SYS_NAND_5_ADDR_CYCLE
#define CONFIG_SYS_NAND_PAGE_SIZE 0x800
#define CONFIG_SYS_NAND_PAGE_COUNT 64
#define CONFIG_SYS_NAND_OOBSIZE 128
#define CONFIG_SYS_NAND_BLOCK_SIZE 0x20000
#define CONFIG_SYS_NAND_BAD_BLOCK_POS 0x0
#define CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER

#endif

4、功能裁剪文件

configs/sama5d3_xplained_nandflash_defconfig

//功能的裁剪大部分都在这个配置里面,把需要的功能赋值为"y",
//不用的功能,“# CONFIG_DISPLAY_BOARDINFO is not set”

CONFIG_ARM=y
CONFIG_ARCH_AT91=y
CONFIG_SYS_TEXT_BASE=0x26f00000
CONFIG_TARGET_SAMA5D3_XPLAINED=y
CONFIG_SPL_GPIO_SUPPORT=y
CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y
CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
CONFIG_SPL=y
CONFIG_DEBUG_UART_BOARD_INIT=y
CONFIG_DEBUG_UART_BASE=0xffffee00
CONFIG_DEBUG_UART_CLOCK=132000000
CONFIG_DEFAULT_DEVICE_TREE="at91-sama5d3_xplained"
CONFIG_DEBUG_UART=y
CONFIG_ENV_VARS_UBOOT_CONFIG=y  //支持环境变量配置
CONFIG_FIT=y
CONFIG_NAND_BOOT=y
CONFIG_BOOTDELAY=3            //启动延时3S
CONFIG_USE_BOOTARGS=y
//启动传参数,我更改了一下,主要功能是添加了一个分区
#CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,768k(uboot)ro,256K(env_redundant),256k(env),512k(dtb),6M(kernel)ro,-(rootfs) rootfstype=ubifs ubi.mtd=6 root=ubi0:rootfs"
CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,768k(uboot)ro,256K(env_redundant),256k(env),512k(dtb),6M(kernel)ro,160M(rootfs),-(app) rootfstype=ubifs ubi.mtd=7 root=ubi0:rootfs"
# CONFIG_DISPLAY_BOARDINFO is not set
CONFIG_SPL_NAND_SUPPORT=y
CONFIG_HUSH_PARSER=y
CONFIG_CMD_BOOTZ=y
# CONFIG_CMD_FLASH is not set
# CONFIG_CMD_LOADS is not set
CONFIG_CMD_MMC=y     //EMMC功能,SDIO接口,和SD卡是一样的;
CONFIG_CMD_NAND=y
CONFIG_CMD_NAND_TRIMFFS=y    //这是一种校验方式,烧录文件系统ubi的时候会用到
CONFIG_CMD_USB=y
CONFIG_CMD_DHCP=y
CONFIG_CMD_MII=y             //调试网络驱动的MAC控制器接口
CONFIG_CMD_PING=y            //支持ping命令,方便验证
CONFIG_CMD_EXT4=y
CONFIG_CMD_EXT4_WRITE=y
CONFIG_CMD_FAT=y
CONFIG_CMD_UBI=y
CONFIG_OF_CONTROL=y
CONFIG_SPL_OF_CONTROL=y
CONFIG_OF_SPL_REMOVE_PROPS="interrupts interrupt-parent dmas dma-names"
CONFIG_ENV_IS_IN_NAND=y
CONFIG_DM=y
CONFIG_SPL_DM=y
CONFIG_SPL_DM_SEQ_ALIAS=y
CONFIG_CLK=y
CONFIG_SPL_CLK=y
CONFIG_CLK_AT91=y
CONFIG_AT91_UTMI=y
CONFIG_AT91_H32MX=y
CONFIG_DM_GPIO=y
CONFIG_AT91_GPIO=y
CONFIG_DM_MMC=y
CONFIG_GENERIC_ATMEL_MCI=y
CONFIG_DM_ETH=y               //支持网络设备树,GPIO的关键配置发现找不到代码,因为是从设备树进行GPIO配置的,相当于参数带入到uboot中,很高级很好玩;
CONFIG_MACB=y                 //网络驱动的控制器
CONFIG_PINCTRL=y
CONFIG_SPL_PINCTRL=y
CONFIG_PINCTRL_AT91=y
CONFIG_DM_SERIAL=y
CONFIG_DEBUG_UART_ATMEL=y
CONFIG_DEBUG_UART_ANNOUNCE=y
CONFIG_ATMEL_USART=y
CONFIG_TIMER=y
CONFIG_SPL_TIMER=y
CONFIG_ATMEL_PIT_TIMER=y
CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_STORAGE=y
CONFIG_W1=y
CONFIG_W1_GPIO=y
CONFIG_W1_EEPROM=y
CONFIG_W1_EEPROM_DS24XXX=y
CONFIG_FAT_WRITE=y
CONFIG_OF_LIBFDT_OVERLAY=y

5、设备树所在路径:arch/arm/dts/

设备树管脚定义

在这里插入图片描述

修改:at91-sama5d3_xplained.dts

macb0: ethernet@f0028000 {
phy-mode = “rgmii”;
#address-cells = <1>;
#size-cells = <0>;
status = “okay”;

ethernet-phy@0 {
reg = <0x0>;
};
};

修改为:
            macb0: ethernet@f0028000 {
   
                phy-mode = "mii";   //更改PHY的接口方式
                #address-cells = <1>;
                #size-cells = <0>;
                status = "okay";

                ethernet-phy@7 {
   
                    reg = <0x7>;
                };
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值