uboot - pinctrl - FPGA回片前测试阶段 - 设置GPIO引脚复用失败

这篇具有很好参考价值的文章主要介绍了uboot - pinctrl - FPGA回片前测试阶段 - 设置GPIO引脚复用失败。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

pinctrl设置引脚复用失败,没有调用到controller中的set_groups_function函数。

问题定位

  1. pinctrl如何注册dm节点
  2. 如何进行设备树中各个设备节点下的复用配置
  3. 为什么没调用到控制器实现的set_groups_function函数
&gpio0 {
	status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&gpioa15_pinctrl>;
};

&pinctrl {
    gpioa15 {
        gpioa15_pinctrl: gpioa15_grp {
            ts,pins = <PB7>;
            mux,val = <5>;
            function = "gpioa15";
            groups = "gpioa15_grp";
        };
    };
};

pinctrl如何注册dm节点

调用过程:

[uboot/drivers/core/device.c]
int device_probe(struct udevice *dev)
	 /* Process pinctrl for everything except the root device, and
	 * continue regardless of the result of pinctrl. Don't process pinctrl
	 * settings for pinctrl devices since the device may not yet be
	 * probed. 
	 * */
	pinctrl_select_state(dev, "default");
		pinctrl_select_state_simple(dev);
		/*
		 * Try full-implemented pinctrl first.
		 * If it fails or is not implemented, try simple one.
		 */
			if (pinctrl_select_state_full(dev, statename))
				return pinctrl_select_state_simple(dev);
	UCLASS_DRIVER(pinctrl) = {
	.id = UCLASS_PINCTRL,
	.post_bind = pinctrl_post_bind,
	.flags = DM_UC_FLAG_SEQ_ALIAS,
	.name = "pinctrl",

	ret = uclass_pre_probe_device(dev);
	ret = uclass_post_probe_device(dev);
		uc_drv->post_probe
			pinctrl_post_bind
				return pinconfig_post_bind(dev);
	pinctrl_select_state(dev, "default");
		pinctrl_select_state_full(dev, statename)
			ret = pinctrl_config_one(config);
				ops = pinctrl_get_ops(pctldev);
				/* this ops was set by controller */
				return ops->set_state(pctldev, config);
	
};

上面的调用过程是通过加log找出来的,log如下:

__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
initr_nand bypass                                                                                                                   
MMC:   __file:drivers/core/device.c __func:device_probe __line:431                                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
dev 0x00000000bf741ec0, size 0xa0, name mmc@f0512000, ofnode 10c4, mmc@f0512000                                                     
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
dev 0x00000000bf742260, size 0xa0, name mmc@f0513000, ofnode 1158, mmc@f0513000                                                     
__file:drivers/core/device.c __func:device_probe __line:431        

看着就是在pinctrl_select_state_full 函数里出了问题:
每次进入pinctrl_select_state_full 函数只能打印到68行,下面的打印出不来,没有调到pinctrl_config_one,所以设备树里注册的gpioa15_pinctrl没有被配置。

/**
 * pinctrl_select_state_full() - full implementation of pinctrl_select_state
 *
 * @dev: peripheral device
 * @statename: state name, like "default"
 * @return: 0 on success, or negative error code on failure
 */
static int pinctrl_select_state_full(struct udevice *dev, const char *statename)
{
	char propname[32]; /* long enough */
	const fdt32_t *list;
	uint32_t phandle;
	struct udevice *config;
	int state, size, i, ret;

printf("__file:%s __func:%s __line:%d\n", __FILE__, __func__, __LINE__);
	state = dev_read_stringlist_search(dev, "pinctrl-names", statename);
	if (state < 0) {
		char *end;
		/*
		 * If statename is not found in "pinctrl-names",
		 * assume statename is just the integer state ID.
		 */
		state = simple_strtoul(statename, &end, 10);
		if (*end)
			return -EINVAL;
	}
printf("__file:%s __func:%s __line:%d\n", __FILE__, __func__, __LINE__);
	snprintf(propname, sizeof(propname), "pinctrl-%d", state);
	list = dev_read_prop(dev, propname, &size);
	if (!list)
		return -EINVAL;

	size /= sizeof(*list);
    printf("__file:%s __func:%s __line:%d size:%d\n", __FILE__, __func__, __LINE__, size);
	for (i = 0; i < size; i++) {
		phandle = fdt32_to_cpu(*list++);
		ret = uclass_get_device_by_phandle_id(UCLASS_PINCONFIG, phandle,
						      &config);
		if (ret) {
			dev_warn(dev, "%s: uclass_get_device_by_phandle_id: err=%d\n",
				__func__, ret);
			continue;
		}
printf("__file:%s __func:%s __line:%d\n", __FILE__, __func__, __LINE__);
		ret = pinctrl_config_one(config);
		if (ret) {
			dev_warn(dev, "%s: pinctrl_config_one: err=%d\n",
				__func__, ret);
			continue;
		}
	}

	return 0;
}

初步怀疑是69行这里state = dev_read_stringlist_search(dev, "pinctrl-names", statename); 返回的state是个非法值。打印出来看看:
果然都是非法值,-61!!!

pinctrl_probe                                                                                                                       
reg_base:f0389000                                                                                                                   
npins  : 78                                                                                                                         
nfuncs : 1                                                                                                                          
ngroups: 1                                                                                                                          
                                                                                                                                    
func:gpioa15, ngroups = 1                                                                                                           
grp_index = 0                                                                                                                       
group[0] name gpioa15_grp                                                                                                           
mux_val: 0x5                                                                                                                        
npins: 1                                                                                                                            
15                                                                                                                                  
ts_pinctrl_parse_dt done                                                                                                            
ts pinctrl initialized                                                                                                              
__file:drivers/core/device.c __func:device_probe __line:523                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70  state:-61                                       
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70  state:-61                                       
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
initr_nand bypass                                                                                                                   
MMC:   __file:drivers/core/device.c __func:device_probe __line:431                                                                  
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70  state:-61                                       
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
dev 0x00000000bf741ec0, size 0xa0, name mmc@f0512000, ofnode 10c4, mmc@f0512000                                                     
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:68                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70  state:-61                                       
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                          

uboot的异常宏号码列表
uboot/include/linux/errno.h

#define	EBFONT		59	/* Bad font file format */
#define	ENOSTR		60	/* Device not a stream */
#define	ENODATA		61	/* No data available */

dev_read_stringlist_search的定义:

static inline int dev_read_stringlist_search(const struct udevice *dev,
					     const char *propname,
					     const char *string)
{
	return ofnode_stringlist_search(dev_ofnode(dev), propname, string);
}

int ofnode_stringlist_search(ofnode node, const char *property,
			     const char *string)
{
	if (ofnode_is_np(node)) {
	//maybe bug here?
		return of_property_match_string(ofnode_to_np(node),
						property, string);
	} else {
		int ret;

		ret = fdt_stringlist_search(gd->fdt_blob,
					    ofnode_to_offset(node), property,
					    string);
		if (ret == -FDT_ERR_NOTFOUND)
			//maybe bug here?
			return -ENODATA;
		else if (ret < 0)
			return -EINVAL;

		return ret;
	}
}

上面注释中有两个位置可能返回了ENODATA,此处已经开始怀疑是不是设备树描述地有问题了。回头看了一下dts中,pinctrl-names属性是存在的。。。
但是dts虽然有,编译出dtb到后不一定还是存在的,这里通过请教前辈,有哪些fdt的调试手段,前辈推荐了fdt命令,在uboot中可以用于显示设备树信息:
如何使用:

  1. 通过printenv,找到fdtcontroladdr属性的值,此为fdt所在地址
  2. 运行fdt fdtcontroladdr
  3. 运行fdt list
    找到gpio和pinctrl节点所在:
    uboot - pinctrl - FPGA回片前测试阶段 - 设置GPIO引脚复用失败,fpga开发
    可以看到gpio及其pinctrl配置,实际已经配置进去了。
    从这里开始,我就觉得不对劲了,只能开始请神了,所以我找了原先的pinctrl mantainer。原先的mantainer说:
    uboot中GPIO节点的pinctrl配置,是必须在gpio命令运行完毕之后,才会进行pinctrl的配置的!

恍然大悟,之前没有注意过这个特性,我运行了gpio set 15 1后:

=> gpio set 15 1                                                                                                                    
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
dev->name:gpio@f0390000                                                                                                             
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70                                                  
fdt_stringlist_search len:8                                                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:72  state:0 name:default                            
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:83                                                  
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:90 size:1                                           
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
dev->name:gpioa15                                                                                                                   
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70                                                  
const fdt_stringlist_search == FDT_ERR_NOTFOUND                                                                                     
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:72  state:-61 name:default                          
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
dev->name:gpioa15_grp                                                                                                               
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70                                                  
const fdt_stringlist_search == FDT_ERR_NOTFOUND                                                                                     
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:72  state:-61 name:default                          
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:100                                                 
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:32                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:34                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:36                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:38                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:44                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:36                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:38                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:44                                                         
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_config_one __line:50                                                         
__func:pinctrl_generic_set_state line:340                                                                                           
__func:pinctrl_generic_set_state_subnode line:301                                                                                   
>>>get group[0] gpioa15_grp                                                                                                         
__func:pinctrl_generic_set_state_subnode line:326                                                                                   
__func:pinctrl_generic_set_state_one line:250                                                                                       
__func:pinctrl_generic_set_state_one line:261                                                                                       
__func:pinmux_enable_setting line:119                                                                                               
set_mux, function:0, group:0                                                                                                        
group name:gpioa15_grp, func name:gpioa15 mux_val:5                                                                                 
pin15, wr 0x00000000f038912c, val 0x50000000                                                                                        
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
failed to get gpio clock                                                                                                            
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:460                                                                         
__file:drivers/core/device.c __func:device_probe __line:476                                                                         
__file:drivers/core/device.c __func:device_probe __line:479                                                                         
dev->name:pa                                                                                                                        
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:70                                                  
const fdt_stringlist_search == FDT_ERR_NOTFOUND                                                                                     
__file:drivers/pinctrl/pinctrl-uclass.c __func:pinctrl_select_state_full __line:72  state:-61 name:default                          
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:482                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
gpio: pin 15 (gpio 15) value is 1                                                                                                   
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431                                                                         
__file:drivers/core/device.c __func:device_probe __line:431  

可以看到name:default已经找到了,再使用devmem查看pinctrl对应的B组寄存器值:

=> md 0xf038912c                                                                                                                    
f038912c: 50000000 00000000 00000000 00000000    ...P............                                                                   
f038913c: 00000000 00000000 00000000 00000000    ................                                                                   
f038914c: 00000000 00000000 00000000 00000000    ................                                                                   
f038915c: 00000000 00000000 00000000 00000000    ................                                                                   
f038916c: 00000000 00000000 00000000 00000000    ................                                                                   
f038917c: 00000000 00000000 00000000 00000000    ................                                                                   
f038918c: 00000000 00000000 00000000 00000000    ................                                                                   
f038919c: 00000000 00000000 00000000 00000000    ................                                                                   
f03891ac: 00000000 00000000 00000000 00000000    ................                                                                   
f03891bc: 00000000 00000000 00000000 00000000    ................                                                                   
f03891cc: 00000000 00000000 00000000 00000000    ................                                                                   
f03891dc: 00000000 00000000 00000000 00000000    ................                                                                   
f03891ec: 00000000 00000000 00000000 00000000    ................                                                                   
f03891fc: 00000000 000000ff 00000000 00000000    ................                                                                   
f038920c: 00000000 000000ff 00000000 00000000    ................                                                                   
f038921c: 00000000 00000000 00000000 00000000    ................                                                                   
=>   

func5配置成功。

TODO:gpio中如何调用到pinctrl配置接口

推荐链接:
https://blog.csdn.net/ZHONGCAI0901/article/details/117986327文章来源地址https://www.toymoban.com/news/detail-843475.html

到了这里,关于uboot - pinctrl - FPGA回片前测试阶段 - 设置GPIO引脚复用失败的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RK3588 设备树pinctrl gpio子系统解析,解决GPIO无法正确拉高拉低的问题,RK3588设备树详解

    firefly的官方说明文档RK3588gpio系统说明 其中,bank是所属的组,Core-3588J 有 5 组 GPIO bank:GPIO0-GPIO4,每组又以 A0-A7, B0-B7, C0-C7, D0-D7 作为编号区分。 首先,对于firefly的rk3588j的开发板,其设备树有几个比较重要的文件, 分别是 /kernel/arch/arm64/boot/dts/rockchip/rk3588s-pinctrl.dtsi ; /ker

    2024年02月06日
    浏览(43)
  • 【精读Uboot】SPL阶段的board_init_r详细分析

    对于i.MX平台上的SPL来说,其不会直接跳转到Uboot,而是在SPL阶段借助BOOTROM跳转到ATF,然后再通过ATF跳转到Uboot。 board_init_f 会初始化设备相关的硬件,最后进入 board_init_r 为镜像跳转做准备。下面是 board_init_r 调用的核心函数流程,接下来我们会对其中的函数进行详细分析。

    2024年02月09日
    浏览(49)
  • RK3568平台入门到精通系列讲解之UBOOT开发篇(GPIO操作)

    开始之前,不得不说UBOOT启动的三个阶段,这个很重要! 第一阶段(汇编语言阶段) 1. 设置异常向量表,当系统发生异常时总会接入到一个固定地址。 2. 硬件初始化。配置时钟相关参数,比如分频系数等等(内核时钟,总线时钟,IO接口时钟) 3. 关闭看门狗。 4. 关闭MMU,这

    2024年02月12日
    浏览(100)
  • XILINX Ultrascale+ FPGA学习(5)——GPIO

    参考文档 ug1085 GPIO即通用I/O,使用过树莓派和单片机的同学们肯定非常熟悉。是ARM芯片用于连接外设的I/O口。在SOC Ultrascale+ 里的ARM芯片的GPIO连接到MIO(复用IO,与GPIO不是一一对应的);当MIO不够用时,可以使用EMIO来扩展,从而使用FPGA上的引脚,EMIO是PS和PL的连接的接口。

    2024年02月06日
    浏览(54)
  • STM32 GPIO设置(GPIO初始化)学习笔记

    GPIO 都知道是 通用输入输出接口 的意思就不详细解释 那么我们就直接进入怎么设置GPIO接口: 这里我的编译软件是keil5,相信大家都应该知道stm32有各种的工作模式上拉、下拉、推挽、开漏等等。如果想要了解具体的工作模式原理这里我推荐大家看:推挽 开漏 高阻 这都是谁

    2024年03月28日
    浏览(59)
  • 【IMX6ULL驱动开发学习】10.设置uboot使用网络加载zImage和dtb

    首先根据这篇博客,保证自己的开发板与Ubuntu主机处于同一个网段,并且可以ping通 【IMX6ULL驱动开发学习】03.设置IMX6ULL开发板与虚拟机在同一网段 1. 在uboot中设置网络 首先启动自己的板子进入Linux系统,使用 ifconfig 命令或者 ifconfig -a 命令查看自己网卡的地址 我的网卡地址是

    2024年02月11日
    浏览(61)
  • Jetson TX2 GPIO权限设置,Jetson.GPIO提供的99-gpio.rules文件没有效果

    在此之前得确认1. 用户组gpio是否存在 getent group | grep gpio (如果没创建就 groupadd -r gpio 创建)2. 当前用户是否已经加入gpio用户组 groups | grep gpio (如果没加入就 usermod -aG gpio 当前用户名 加入) 不过一般Jetson 把以下内容写到 /etc/udev/rules.d/99-gpio.rules 中去 然后运行   打算使用Jet

    2024年02月08日
    浏览(48)
  • 软件测试阶段简介_单元测试、集成测试、配置项测试、系统测试

    一般来说,按照软件的研制阶段划分,软件测试可分为单元测试、集成测试、配置项测试、系统测试等。本文将对上述各测试阶段进行逐一介绍。 V模型是软件测试过程中一种比较常见的模型,是基于瀑布开发模型而来。虽然V模型有很多缺点,但是它明确规定了各个测试阶段

    2024年01月19日
    浏览(58)
  • API阶段测试

    异常类都继承自java.lang包下的(C) A、Error类 B、Exception类 C、Throwable类 D、IOError类 下列符号中,用于分隔throws抛出的多个异常的是(B) A、; B、, C、 D、| FileWriter类中的read()方法读取到流末尾的返回值是(B) 修改 A、0 B、-1 C、1 D、无返回值 下列Reader类的常用方法中,

    2024年02月09日
    浏览(23)
  • 前端第一阶段测试

    1、【单选】下列哪个是子代选择器 A A、pb B、p b C、p+b D、p.b 2、【单选】下述有关css属性position的属性值的描述,说法错误的是?B A、static:没有定位,元素出现在正常的流中 B、fixed:生成绝对定位的元素,相对于父元素进行定位 fixed就是固定定位不要想复杂了 C、relative:生

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包