Python爬虫源码论文_python爬虫毕业论文

第三方分享代码
hacker 9个月前 (02-13) 下载 34 2

适读人群 :本书既适合需要储备反爬虫知识的前端工程师和后端工程师阅读,也适合需要储备绕过知识的爬虫工程师、爬虫爱好者以及Python程序员阅读。

文件:590m.com/f/25127180-489558013-05e0d6(访问密码:551685)

以下内容无关:

-------------------------------------------分割线---------------------------------------------

pinctrl子系统 用于引脚的配置。如复用为那种引脚,电器特性等等。

gpio子系统 用于引脚的控制。如配置输出,输出高低电平等等。

当pinctrl子系统配置引脚为GPIO模式后,才能用gpio子系统控制引脚。

(pinctrl子系统可以把引脚配置为 GPIO模式,I2C模式* 等等*)

10.1 参考路径

pinctrl子系统内核文档:Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt

pinctrl子系统源码路径:drivers/pinctrl

Python爬虫源码论文_python爬虫毕业论文

10.2 pinctrl子系统主要工作

pinctrl子系统 主要工作内容(内核实现):

获取设备树中用户配置的 PIN 信息。

根据获取到的信息,配置 PIN 的复用功能、电气特性。

以上工作内容都是内核实现的,用户不需要自己编写代码,只需要配置好设备树即可。

10.2 pinctrl子系统格式说明

pin controller 子节点格式是由芯片厂商自定义的,即每家芯片pin controller子节点格式都是不一样的。

各个厂商的 pinctrl 使用说明可以参考厂商提供的文档或去内核源码路径 Documentation/devicetree/bindings/pinctrl 目录下找到对应厂商的使用说明。

格式规范如:

imx6ull格式:

//client端:

@节点名字 {

Python爬虫源码论文_python爬虫毕业论文

pinctrl-names = "default";

展开全文

pinctrl-0 = <&pinctrl_自定义名字A>;

status = "okay";

};

//pincontroller服务端

pinctrl_自定义名字A: 自定义名字B {

fsl,pins = <

引脚复用宏定义 PAD(引脚)属性, // 引脚 A

引脚复用宏定义 PAD(引脚)属性; // 引脚 B

>;

};

rk3288实例:

//client端

@uart0 {

pinctrl-names = "default";

pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>; //它使用三个节点来表示三组引脚。

status = "okay";

};

//pincontroller服务端

gpio4_uart0 {

// 引脚 A

uart0_xfer: uart0-xfer {

rockchip,pins = <UART0BT_SIN>, <UART0BT_SOUT>; //使用rockchip,pins来指定使用哪些引脚,就等效于groups

rockchip,pull = <VALUE_PULL_DISABLE>; //引脚的参数

rockchip,drive = <VALUE_DRV_DEFAULT>; //引脚的参数

};

// 引脚 B

uart0_cts: uart0-cts {

rockchip,pins = <UART0BT_CTSN>;

rockchip,pull = <VALUE_PULL_DISABLE>;

rockchip,drive = <VALUE_DRV_DEFAULT>;

};

// 引脚 C

uart0_rts: uart0-rts {

rockchip,pins = <UART0BT_RTSN>;

rockchip,pull = <VALUE_PULL_DISABLE>;

rockchip,drive = <VALUE_DRV_DEFAULT>;

};

uart0_rts_gpio: uart0-rts-gpio {

rockchip,pins = <FUNC_TO_GPIO(UART0BT_RTSN)>;

rockchip,drive = <VALUE_DRV_DEFAULT>;

};

};

10.3 概念

上面例子中说到 pin controller 和 client device,这两个节点说明都在文件 pinctrl-bindings.txt 中有说明。

pin controller:

服务端。

提供引脚的配置信息。

client device:

客户端。

声明需要使用哪个引脚。(使用来自客户端提供的引脚信息)

客户端其实就是需要使用该引脚的设备树节点。

/* For a client device requiring named states */

device {

pinctrl-names = "active", "idle"; // 该设备有两种状态,分别对应 pinctrl-0 和 pinctrl-1

pinctrl-0 = <&state_0_node_a>; // 第 0 个状态的名字为 active。对应的引脚在 pinctrl-0 里。

pinctrl-1 = <&state_1_node_a &state_1_node_b>; // 第 1 个状态的名字为 idle。对应的引脚在 pinctrl-1 里。

};

function:

功能。

groups:

使用 function 功能的 N 组引脚。

如:

state_0_node_a

{

uart0

{

function = "uart0";

groups = "u0rxtx", "u0rtscts";

};

};

10.4 实例分析

以 IMX6UL 为例子分析。

参考 NXP 提供的关于 pinctrl 文档或去 Documentation/devicetree/bindings/pinctrl 下找到文档 fsl,imx6ul-pinctrl.txt 和 fsl,imx-pinctrl.txt。

工具相应文档编写 pinctrl 配置信息。

根据文档得出以下几点关于 IMX6ULL pinctrl 子系统开发的要求:

例如,Linux IMX pinctrl驱动程序以客户节点的名称作为函数名,服务节点的名称作为组名来创建映射表。

10.4.1 pin controller服务端

有些SoC 把 PIN 叫 PAD

格式有芯片厂商定义

引脚复用宏 & 引脚属性值:

引脚复用宏定义 如 MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 在 内核源码/arch/arm/boot/dts/imx6ul-pinfunc.h 文件中定义,由芯片厂商编写。

如图:

引脚复用宏 由5个参数组成,分别为:

mux_reg:复用选择寄存器的偏移地址。

conf_reg:引脚属性控制的偏移地址。

input_reg:输入选择寄存器偏移地址。(用于输入的引脚)

mux_mode:复用选择寄存器模式选择位的值。

input_val:输入选择寄存器的值。

前面三个均为 寄存器地址偏移值,后面两个为对应要写入寄存器的值。

对应规则:

mux_reg <-- mux_mode

conf_reg <-- 引脚属性值 (宏后面的参数)

因为引脚属性配置比较多样灵活,所以由用户决定该值,便提出到宏外。

input_reg <-- input_val

10.4.2 client device客户端

格式规范由设备树规定

客户端其实就是需要使用该引脚的设备树节点。

客户端必须至少有一个 pinctrl-0 状态。

相关推荐

网友评论

  • (*)

最新评论

  • 访客 2024-02-13 12:18:56 回复

    g:输入选择寄存器偏移地址。(用于输入的引脚) mux_mode:复用选择寄存器模式选择位的值。 input_val:输入选择寄存器的值。 前面三个均为 寄存器地址偏移值,后面两个为对

    1
  • 访客 2024-02-13 11:43:03 回复

    _val:输入选择寄存器的值。 前面三个均为 寄存器地址偏移值,后面两个为对应要写入寄存器的值。对应规则:mux_reg <-- mux_modeconf_reg <-- 引脚属性值 (宏后面的

    2