Linux boot 时 USB 的初始化过程分析2

现状 OK6410A  linux-5.11
1个 roothub 上面接了2个 port , 无接其他设备
具体过程:

===========================
初始化第1.1阶段
ohci_hcd_s3c2410_probe
	s3c_usb_phy_init // 初始化 PHY
    s3c2410_start_hc // 必须处理好 power 和 clock 的问题,并设置正确,才可以开始usb_add_hcd
    	开启时钟
    调用 usb_add_hcd
		注册 usb bus
		hcd->driver->reset(hcd); // ohci_setup
			// 读写ohci 寄存器 , virt base address : d08ce000
		注册 中断
		hcd->driver->start(hcd); // ohci_start
			// 读写ohci 寄存器 
		获取设备描述符
		获取配置描述符
		选择配置
		get_hub_descriptor
		hub_activate.1
			hub_power_on
			延时调用 第二阶段

===========================
初始化第1.2阶段
	hub_init_func2
		hub_activate.2
			走init2和init3
			kick_hub_wq->queue_work(hub_wq, &hub->events)
===========================
初始化第二阶段
	hub_event
		枚举 roothub 上的 所有port 上的设备(包括hub)
	
	hub_suspend
	
===========================
初始化完成




===========================
运行时流程
host 定时问 hub 有没有中断?还是有没有port 改变(插入,拔出)事件(有的话调用hub_irq)
	usb_hcd_irq
		hcd->driver->irq  // ohci_irq
			...
				urb->complete(urb) // 即 hub_irq / usb_mouse_irq / hid_irq_in 
hub_irq
	kick_hub_wq(hub);

hub_event
	根据 changebit 对 hub 上的 改变事件对应的设备 进行枚举


usb_add_hcd(struct usb_hcd *hcd,unsigned int irqnum, unsigned long irqflags)
	usb_register_bus(&hcd->self);
		s3c2410-ohci: new USB bus registered, assigned bus number 1
	hcd->driver->reset(hcd);
		s3c2410-ohci: created debug files
	usb_hcd_request_irqs(hcd, irqnum, irqflags);
		s3c2410-ohci: irq 79, io mem 0x74300000
	hcd->driver->start(hcd)
	register_root_hub(hcd);
		usb_set_device_state(usb_dev, USB_STATE_ADDRESS);
		usb_get_device_descriptor
		usb_new_device // only called by register_root_hub & hub_port_connect // 这个并不是new device ,而是 new device 的封装
			usb_enumerate_device
				usb_get_configuration
					usb_get_descriptor
				udev->product = usb_cache_string(udev, udev->descriptor.iProduct);
					[1] usb_get_langid:939: usb usb1: default language 0x0409
				
			[1] usb_new_device:2554: usb usb1: udev 1, busnum 1, minor = 0
			device_add(&udev->dev);  // 注册 USB设备device
			|		[1] usb_probe_device:255: usb usb1: usb_probe_device
			|
			|
			usb_generic_driver_probe //      USB设备driver
				usb_choose_configuration
					[1] usb_choose_configuration:187: usb usb1: configuration #1 chosen from 1 choice
				usb_set_configuration
					[1] usb_set_configuration:2181: usb usb1: adding 1-0:1.0 (config #1, interface 0)

					device_add(&intf->dev); // 注册 USB接口device // 为hub接口
					|
					|	   [1] usb_probe_interface:327: hub 1-0:1.0: usb_probe_interface
					|	   [1] usb_probe_interface:349: hub 1-0:1.0: usb_probe_interface - got id
					hub_probe				// 		USB接口driver
						hub 1-0:1.0: USB hub found
						hub_configure
							get_hub_descriptor(hdev, hub->descriptor);
								[1] ohci_s3c2410_hub_control:194: s3c2410-ohci s3c2410-ohci: s3c2410_hub_control((ptrval),0xa006,0x2900,0x0000,(ptrval),000f)
							
							hub 1-0:1.0: 2 ports detected
							[1] hub_configure:1474: hub 1-0:1.0: standalone hub
							[1] hub_configure:1486: hub 1-0:1.0: no power switching (usb 1.0)
							[1] hub_configure:1495: hub 1-0:1.0: individual port over-current protection
							[1] hub_configure:1570: hub 1-0:1.0: power on to power good time: 4ms
							
							hub_hub_status(hub, &hubstatus, &hubchange);
								[1] ohci_s3c2410_hub_control:194: s3c2410-ohci s3c2410-ohci: s3c2410_hub_control((ptrval),0xa000,0x0000,0x0000,(ptrval),0004)
							
							[1] hub_configure:1628: hub 1-0:1.0: local power source is good

							usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq, hub, endpoint->bInterval);
								urb->complete = hub_irq;
						 	
						 	hub_activate.1(hub, HUB_INIT);
						 		走 type == HUB_INIT
							 		hub_power_on
							 			[1] hub_power_on:914: hub 1-0:1.0: trying to enable port power on non-switchable hub
							 			set_port_feature
							 			[1] ohci_s3c2410_hub_control:194: s3c2410-ohci s3c2410-ohci: s3c2410_hub_control((ptrval),0x2303,0x0008,0x0001,(ptrval),0000)
							 			[1] ohci_s3c2410_hub_control:194: s3c2410-ohci s3c2410-ohci: s3c2410_hub_control((ptrval),0x2303,0x0008,0x0002,(ptrval),0000)
								
									//此时 hub 还没初始化完,接着让另一段来处理
							 		INIT_DELAYED_WORK(&hub->init_work, hub_init_func2);
							 		queue_delayed_work(system_power_efficient_wq, &hub->init_work, msecs_to_jiffies(delay));
							 		return;


hub_init_func2
	hub_activate.2
		走init2和init3
		usb_control_msg

		// 此时hub初始化完成,接着让 hub_event 来 干活
		kick_hub_wq->queue_work(hub_wq, &hub->events)


hub_event
	port_event
		hub_port_connect_change
			hub_port_connect
				usb_new_device
					device_add(&udev->dev);
				usb_disconnect
					device_del(&udev->dev);
	

hub_suspend
	hub_event 的连锁反应





枚举过程的 control 信息的收发
	usb_control_msg
		有时候会调用 ohci_s3c2410_hub_control
		有时候不调用 ohci_s3c2410_hub_control



USB 设备的初始化都是 Hub 这边发起的
只要你有 USB 主机控制器,就一定会有 Root Hub,

对于 Hub 来说,当你插入一个设备到 Hub 口里,就会触发一件事件。而第一件事件的发生其实是 Hub 驱动程序本身的初始化




hub的中断
	hub_irq

hub的IN中断传输
	usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq, hub, endpoint->bInterval);
	这是hub准备的一个 int传输包,用于一次IN传输,让HOST定时访问hub



为什么 hub_probe之后要 kick event
	因为要 hub 干活(枚举hub 所有port 上的设备)
	
	hub_probe 设置了 该 hub的驱动 , 但是 该 hub 上可能接了设备,所以要处理一下


	表现形式为 最后发了一个 消息




hub_event
	port_event
		hub_port_connect_change
			hub_port_connect
				usb_new_device
					device_add(&udev->dev);
				usb_disconnect
					device_del(&udev->dev);



凡是真正的有端口变化事件发生,hub_irq 就会被调用,而 hub_irq()
最终会调用 kick_khubd(),触发 Hub 的 event_list,于是再次调用 hub_events()函数




我们曾经在 hub_configure 中讲过中断传输,当时调用了 usb_fill_int_urb()函数,并且把
hub_irq 作为一个参数传递了进去,最终把 urb->complete 赋值为 hub_irq。

然后,主机控制器会 定期询问 Hub,每当 Hub 端口上有一个设备插入或者拔除时,它就会向主机控制器打小报告。

具体来说,从硬件的角度看,就是 Hub 会向主机控制器返回一些信息,或者说 Data,这个 Data 被称作“Hub and Port Status Change Bitmap”,
而从软件角度来看,主机控制器的驱动程序接下 来会在处理好这个过程的 urb 之后,调用该 urb 的 complete 函数,
对于 Hub 来说,这个函数就 是 hub_irq()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
调通sina33m下的RTL8188EU版本 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 wb4916 AT qq.com 完成间:2017/7/7 18:11 版本:V1.0 SDK:Android6.0.1 开发板:SC3817R 1、干掉设置中的BT蓝牙选项: R:\wyb\rtl8188eu_sina33m_sc3817\android\device\softwinner\astar-d7\overlay\frameworks\base\core\res\res\values\config.xml <!-- List of regexpressions describing the interface (if any) that represent tetherable bluetooth interfaces. If the device doesn't want to support tethering over bluetooth this should be empty. --> <!-- default: disable Bluetooth PAN feature --> <string-array translatable="false" name="config_tether_bluetooth_regexs"> <item>"bt-pan"</item> </string-array> 2、干掉BT(特别是rtl8723bs的): R:\wyb\rtl8188eu_sina33m_sc3817\android\device\softwinner\astar-d7\astar_d7.mk PRODUCT_PACKAGES += Launcher3 PRODUCT_PACKAGES += \ ESFileExplorer \ VideoPlayer #Bluetooth PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.camera.xml:system/etc/permissions/android.hardware.camera.xml \ frameworks/native/data/etc/android.hardware.camera.front.xml:system/etc/permissions/android.hardware.camera.front.xml \ frameworks/native/data/etc/android.hardware.ethernet.xml:system/etc/permissions/android.hardware.ethernet.xml \ frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \ frameworks/native/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml #frameworks/native/data/etc/android.hardware.bluetooth.xml:system/etc/permissions/android.hardware.bluetooth.xml \ #frameworks/native/data/etc/android.hardware.bluetooth_le.xml:system/etc/permissions/android.hardware.bluetooth_le.xml #PRODUCT_COPY_FILES += \ # device/softwinner/astar-d7/bluetooth/bt_vendor.conf:system/etc/bluetooth/bt_vendor.conf # bootanimation PRODUCT_COPY_FILES += \ device/softwinner/astar-d7/media/bootanimation.zip:system/media/bootanimation.zip # camera config for camera detector #PRODUCT_COPY_FILES += \ # device/softwinner/astar-d7/hawkview/sensor_list_cfg.ini:system/etc/hawkview/sensor_list_cfg.ini PRODUCT_PROPERTY_OVERRIDES += \ persist.sys.usb.config=mass_storage,adb \ ro.adb.secure=0 \ ro.sys.mutedrm=true \ rw.logger=0 #$(call inherit-product-if-exists, vendor/google/products/gms_base.mk) #for 8723bs-vq0,should setmacaddr #PRODUCT_PACKAGES += setmacaddr #for 8723bs-vq0,should setbtmacaddr #PRODUCT_PACKAGES += setbtmacaddr 3、 R:\wyb\rtl8188eu_sina33m_sc3817\android\device\softwinner\astar-d7\BoardConfig.mk BOARD_WIFI_VENDOR := realtek ifeq ($(BOARD_WIFI_VENDOR), realtek) WPA_SUPPLICANT_VERSION := VER_0_8_X BOARD_WPA_SUPPLICANT_DRIVER := NL80211 BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtl BOARD_HOSTAPD_DRIVER := NL80211 BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_rtl #BOARD_USR_WIFI := rtl8723bs BOARD_USR_WIFI := rtl8188eu include hardware/realtek/wlan/config/config.mk endif # 1.2 broadcom wifi support # BOARD_USR_WIFI:ap6181/ap6210/ap6212/ap6330/ap6335 #BOARD_WIFI_VENDOR := broadcom ifeq ($(BOARD_WIFI_VENDOR), broadcom) BOARD_WPA_SUPPLICANT_DRIVER := NL80211 WPA_SUPPLICANT_VERSION := VER_0_8_X BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_bcmdhd BOARD_HOSTAPD_DRIVER := NL80211 BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_bcmdhd BOARD_WLAN_DEVICE := bcmdhd WIFI_DRIVER_FW_PATH_PARAM := "/sys/module/bcmdhd/parameters/firmware_path" BOARD_USR_WIFI := ap6212 include hardware/broadcom/wlan/bcmdhd/firmware/$(BOARD_USR_WIFI)/device-bcm.mk endif # 2. Bluetooth Configuration # make sure BOARD_HAVE_BLUETOOTH is true for every bt vendor # BOARD_HAVE_BLUETOOTH_NAME:rtl8723bs/rtl8723bs_vq0/rtl8723cs/ap6210/ap6212/ap6330/ap6335/ #BOARD_HAVE_BLUETOOTH := true # #BOARD_HAVE_BLUETOOTH_BCM := true #BOARD_HAVE_BLUETOOTH_NAME := ap6212 # ##BOARD_HAVE_BLUETOOTH_RTK_COEX := true ##BOARD_HAVE_BLUETOOTH_RTK := true ##BLUETOOTH_HCI_USE_RTK_H5 := true # #BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/softwinner/astar-d7/bluetooth 4、(干掉AP6212,打开RTL8188EU:) R:\wyb\rtl8188eu_sina33m_sc3817\android\device\softwinner\astar-d7\init.sun8i.rc # tp & sensors init_dev_detect # network #insmod /system/vendor/modules/bcmdhd.ko #insmod /system/vendor/modules/bcm_btlpm.ko insmod /system/vendor/modules/usbnet.ko insmod /system/vendor/modules/asix.ko insmod /system/vendor/modules/qf9700.ko #insmod /system/vendor/modules/mcs7830.ko #insmod /system/vendor/modules/smsc95xx.ko insmod /system/vendor/modules/rtl8152.ko #insmod /system/vendor/modules/cdc_ether.ko # bluetooth MAC address programming #chown bluetooth net_bt_stack ro.bt.bdaddr_path #chown bluetooth net_bt_stack /system/etc/bluetooth #chown bluetooth net_bt_stack /data/misc/bluetooth #setprop ro.bt.bdaddr_path "/data/misc/bluetooth/bdaddr" ## bluetooth ## UART device #chmod 0660 /dev/ttyS1 #chown bluetooth net_bt_stack /dev/ttyS1 # ## power up/down interface #chmod 0660 /sys/class/rfkill/rfkill0/state #chmod 0660 /sys/class/rfkill/rfkill0/type #chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state #chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type # # ## bluetooth LPM #chmod 0220 /proc/bluetooth/sleep/lpm #chmod 0220 /proc/bluetooth/sleep/btwrite #chown bluetooth net_bt_stack /proc/bluetooth/sleep/lpm #chown bluetooth net_bt_stack /proc/bluetooth/sleep/btwrite #write /proc/bluetooth/sleep/lpm 1 (使用的是android4.4.2的service:) # 1. realtek & eagle wifi service # 1.1 realtek & eagle wifi sta service service wpa_supplicant /system/bin/wpa_supplicant \ -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ -O/data/misc/wifi/sockets \ -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0 # we will start as root and wpa_supplicant will switch to user wifi # after setting up the capabilities required for WEXT # user wifi # group wifi inet keystore class main socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot # 1.2 realtek & eagle wifi sta p2p concurrent service service p2p_supplicant /system/bin/wpa_supplicant \ -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \ -e/data/misc/wifi/entropy.bin -N \ -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ -O/data/misc/wifi/sockets \ -g@android:wpa_wlan0 class main socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot ## broadcom wifi service ## 1 broadcom wifi sta service #service wpa_supplicant /system/bin/wpa_supplicant \ # -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ # -I/system/etc/wifi/wpa_supplicant_overlay.conf \ # -O/data/misc/wifi/sockets \ # -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0 # # we will start as root and wpa_supplicant will switch to user wifi # # after setting up the capabilities required for WEXT # # user wifi # # group wifi inet keystore # class main # socket wpa_wlan0 dgram 660 wifi wifi # disabled # oneshot # ## 2 broadcom wifi sta p2p concurrent service #service p2p_supplicant /system/bin/wpa_supplicant \ # -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \ # -I/system/etc/wifi/wpa_supplicant_overlay.conf \ # -O/data/misc/wifi/sockets -N \ # -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \ # -I/system/etc/wifi/p2p_supplicant_overlay.conf \ # -puse_p2p_group_interface=1 -e/data/misc/wifi/entropy.bin \ # -g@android:wpa_wlan0 # # we will start as root and wpa_supplicant will switch to user wifi # # after setting up the capabilities required for WEXT # # user wifi # # group wifi inet keystore # class main # socket wpa_wlan0 dgram 660 wifi wifi # disabled # oneshot 4、(可不用修改:) R:\wyb\rtl8188eu_sina33m_sc3817\android\device\softwinner\astar-d7\ueventd.sun8i.rc 5、(可选修改:) R:\wyb\rtl8188eu_sina33m_sc3817\android\frameworks\base\packages\SettingsProvider\res\values\defaults.xml <integer name="def_screen_off_timeout">1800000</integer> <bool name="def_lockscreen_disabled">true</bool> R:\wyb\rtl8188eu_sina33m_sc3817\android\packages\apps\Camera2\src\com\android\camera\CameraActivity.java 6、(可选修改:) R:\wyb\rtl8188eu_sina33m_sc3817\lichee\linux-3.4\arch\arm\mach-sunxi\rf\bt_pm.c R:\wyb\rtl8188eu_sina33m_sc3817\lichee\linux-3.4\arch\arm\mach-sunxi\rf\wifi_pm.c struct wifi_pm_ops wifi_select_pm_ops; static char* wifi_mod[] = {" ", "ap6181", /* 1 - AP6181*/ "ap6210", /* 2 - AP6210*/ "rtl8188eu", /* 3 - RTL8188EU*/ "rtl8723au", /* 4 - RTL8723AU*/ "rtl8723bs", /* 5 - RTL8723BS*/ "esp8089", /* 6 - ESP8089*/ "ap6476", /* 7 - AP6476*/ "rtl8189es", /* 8 - rtl8189es*/ "ap6212", /* 9 - AP6212*/ "ap6330", /* 10- AP6330*/ "gb9663", /* 11- GB9663*/ }; static int __devinit wifi_pm_probe(struct platform_device *pdev) { struct wifi_pm_ops *ops = &wifi_select_pm_ops; switch (ops->module_sel.val) { case 1: /* AP6181 */ ap6xxx_gpio_init(); break; case 2: /* AP6210 */ ap6xxx_gpio_init(); break; case 3: /* RTL8188EU */ rtl8188eu_gpio_init(); break; case 4: /* RTL8723AU */ rtl8723au_gpio_init(); break; case 5: /* RTL8723BS */ rtl8723bs_gpio_init(); break; case 6: /* ESP8089 */ esp8089_gpio_init(); break; case 7: /* AP6476 */ ap6xxx_gpio_init(); break; case 8: /* rtl8189es */ rtl8189es_gpio_init(); break; case 9: /* AP6212 */ ap6xxx_gpio_init(); break; default: wifi_pm_msg("wrong sdio module select %d !\n", ops->module_sel.val); } awwifi_procfs_attach(); wifi_pm_msg("wifi gpio init is OK !!\n"); return 0; } 7、 R:\wyb\rtl8188eu_sina33m_sc3817\lichee\tools\pack\chips\sun8iw5p1\configs\d7\sys_config.fex [power_sply] dcdc1_vol = 3000 dcdc2_vol = 1100 dcdc3_vol = 1200 dcdc4_vol = 0 dcdc5_vol = 1500 aldo1_vol = 3300 aldo2_vol = 2500 aldo3_vol = 3000 dldo1_vol = 3300 dldo2_vol = 3300 dldo3_vol = 2800 ;gpio0_vol = 2800 ldoio0_vol = 2800 [jtag_para] jtag_enable = 0 [dram_para] dram_clk = 552 ;---------------------------------------------------------------------------------- ;uart configuration ;uart_used = uart x enable ;uart_type = 2:2 wire,4:4 wire,8:8 wire, full function ;---------------------------------------------------------------------------------- [uart0] uart_used = 1 uart_port = 0 uart_type = 2 uart_tx = port:PF02<3><1><default><default> uart_rx = port:PF04<3><1><default><default> ;---------------------------------------------------------------------------------- ;capacitor tp configuration ;ctp_twi_id : twi controller ID ;ctp_twi_addr : I2C slave address, 7bit ;ctp_screen_max_x/_y : resolution of touch panel ;ctp_revert_x/_y_flag : whether need to revert x/y ;ctp_exchange_x_y_flag: whether need to exchange the value of x and y ;ctp_int_port : port for tp's interrupt signal ;ctp_wakeup : port for wakeup tp ;---------------------------------------------------------------------------------- [ctp_para] ctp_used = 1 ctp_name = "gt82x" ctp_twi_id = 0 ctp_twi_addr = 0x5d ctp_screen_max_x = 1280 ctp_screen_max_y = 800 ctp_revert_x_flag = 1 ctp_revert_y_flag = 1 ctp_exchange_x_y_flag = 1 ctp_int_port = port:PL04<4><default><default><default> ctp_wakeup = port:PL03<1><default><default><1> ctp_power_ldo = ctp_power_ldo_vol = ctp_power_io = ;-------------------------------------------------------------------------------- ; CTP automatic detection configuration ;ctp_detect_used --- Whether startup automatic inspection function. 1:used,0:unused ;Module name postposition 1 said detection, 0 means no detection. ;-------------------------------------------------------------------------------- [ctp_list_para] ctp_det_used = 1 ft5x_ts = 1 gt82x = 1 gslX680 = 1 gslX680new = 0 gt9xx_ts = 1 gt9xxf_ts = 0 tu_ts = 0 gt818_ts = 1 zet622x = 1 aw5306_ts = 1 icn83xx_ts = 0 ;---------------------------------------------------------------------------------- ;lcd0 configuration ;lcd_if: 0:hv(sync+de); 1:8080; 2:ttl; 3:lvds; 4:dsi; 5:edp; 6:extend dsi ;lcd_x: lcd horizontal resolution ;lcd_y: lcd vertical resolution ;lcd_width: width of lcd in mm ;lcd_height: height of lcd in mm ;lcd_dclk_freq: in MHZ unit ;lcd_pwm_freq: in HZ unit ;lcd_pwm_pol: lcd backlight PWM polarity ;lcd_pwm_max_limit lcd backlight PWM max limit(<=255) ;lcd_hbp: hsync back porch ;lcd_ht: hsync total cycle ;lcd_vbp: vsync back porch ;lcd_vt: vysnc total cycle ;lcd_hspw: hsync plus width ;lcd_vspw: vysnc plus width ;lcd_lvds_if: 0:single link; 1:dual link ;lcd_lvds_colordepth: 0:8bit; 1:6bit ;lcd_lvds_mode: 0:NS mode; 1:JEIDA mode ;lcd_frm: 0:disable; 1:enable rgb666 dither; 2:enable rgb656 dither ;lcd_io_phase: 0:noraml; 1:intert phase(0~3bit: vsync phase; 4~7bit:hsync phase; ; 8~11bit:dclk phase; 12~15bit:de phase) ;lcd_gamma_en lcd gamma correction enable ;lcd_bright_curve_en lcd bright curve correction enable ;lcd_cmap_en lcd color map function enable ;deu_mode 0:smoll lcd screen; 1:large lcd screen(larger than 10inch) ;lcdgamma4iep: Smart Backlight parameter, lcd gamma vale * 10; ; decrease it while lcd is not bright enough; increase while lcd is too bright ;smart_color 90:normal lcd screen 65:retina lcd screen(9.7inch) ;---------------------------------------------------------------------------------- [lcd0_para] lcd_used = 1 lcd_driver_name = "default_lcd" lcd_if = 3 lcd_x = 1280 lcd_y = 800 lcd_width = 150 lcd_height = 94 lcd_dclk_freq = 71 lcd_pwm_used = 1 lcd_pwm_ch = 0 lcd_pwm_freq = 50000 lcd_pwm_pol = 1 lcd_hbp = 20 lcd_ht = 1418 lcd_hspw = 10 lcd_vbp = 10 lcd_vt = 830 lcd_vspw = 5 lcd_lvds_if = 0 lcd_lvds_colordepth = 1 lcd_lvds_mode = 0 lcd_frm = 1 lcd_gamma_en = 0 lcd_bright_curve_en = 0 lcd_cmap_en = 0 deu_mode = 0 lcdgamma4iep = 22 smart_color = 90 lcd_bl_en = port:PD13<1><0><default><1> lcd_power = "axp22_dc1sw" lcdd0 = port:PD18<3><0><default><default> lcdd1 = port:PD19<3><0><default><default> lcdd2 = port:PD20<3><0><default><default> lcdd3 = port:PD21<3><0><default><default> lcdd4 = port:PD22<3><0><default><default> lcdd5 = port:PD23<3><0><default><default> lcdd6 = port:PD24<3><0><default><default> lcdd7 = port:PD25<3><0><default><default> lcdd8 = port:PD26<3><0><default><default> lcdd9 = port:PD27<3><0><default><default> ;---------------------------------------------------------------------------------- ;pwm config ;---------------------------------------------------------------------------------- [pwm0_para] pwm_used = 0 pwm_positive = port:PH00<2><0><default><default> [pwm1_para] pwm_used = 1 pwm_positive = port:PH01<2><0><default><default> ;---------------------------------------------------------------------------------- ;usb configuration ;usb_used: usb controller enable, 0-disable, 1-enable ;usb_port_type: usb mode: 0-device, 1-host, 2-otg ;usb_detect_type: usb hotplug detect mode, 0-none, 1-vbus/id detect, 2-id/dpdm detect ;usb_id_gpio: usb id detect IO ;usb_det_vbus_gpio: usb vbus detect IO, "axp_ctrl" for axp ;usb_drv_vbus_gpio: usb dirve vbus IO ;usb_restrict_gpio: usb current restrict IO ;usb_restric_flag: usb current restrict flag ;---------------------------------------------------------------------------------- [usbc0] usb_used = 1 usb_port_type = 2 usb_detect_type = 1 usb_id_gpio = port:PD10<0><1><default><default> usb_det_vbus_gpio = "axp_ctrl" usb_drv_vbus_gpio = port:power4<1><0><default><0> usb_restrict_gpio = usb_host_init_state = 0 usb_restric_flag = 0 usb_restric_voltage = 3550000 usb_restric_capacity= 5 usb_regulator_io = "nocare" usb_regulator_vol = 0 usb_regulator_id_vbus = "axp22_dcdc1" usb_regulator_id_vbus_vol = 3000000 [usbc1] usb_used = 1 usb_drv_vbus_gpio = port:PD12<1><0><default><0> usb_restrict_gpio = usb_host_init_state = 1 usb_restric_flag = 0 usb_regulator_io = "nocare" usb_regulator_vol = 0 usb_not_suspend = 0 ;-------------------------------------------------------------------------------- ;wifi/bt/fm/gps/nfc modules configuration ;module_num: ; 0- none ; 1- ap6181(wifi) ; 2- ap6210(wifi+bt) ; 3- rtl8188eu(wifi) ; 4- rtl8723au(wifi+bt) ; 5- rtl8723bs(wifi+bt) ; 6- esp8089(wifi) ; 7- ap6476(wifi+bt+fm+gps) ; 8- rtl8189es(wifi) ; 9- ap6212(wifi+bt+fm) ; 10- ap6330(wifi+bt+fm) ; 11- gb9663(wifi+bt+fm) ;module_power1: ""- bat, "axp_dldo1"- axp dldo1 ;module_power1_vol: power1 voltage, mv; not used for module_power1 is "" ;module_power2: ""- bat, "axp_dldo2"- axp dldo2 ;module_power2_vol: power2 voltage, mv; not used for module_power2 is "" ;module_power3: ""- bat, "axp_dldo2"- axp dldo2 ;module_power3_vol: power3 voltage, mv; not used for module_power3 is "" ;power_switch: module power switch io when bat supply ;chip_en: enable chip io ;lpo_use_apclk: ""- not use, "losc_out"- a23/33, "ac10032k1"、"ac10032k2"、"ac10032k3"- a80/a83 ;-------------------------------------------------------------------------------- [rf_para] module_num = 3 module_power1 = "" module_power1_vol = 3000000 module_power2 = "" module_power2_vol = 3000000 module_power3 = "" module_power3_vol = 3000000 power_switch = chip_en = lpo_use_apclk = "losc_out" ;-------------------------------------------------------------------------------- ;wifi configuration ;wifi_used: 0-not use, 1- use ;wifi_sdc_id: 0- SDC0, 1- SDC1, 2- SDC2, 3- SDC3 ;wifi_usbc_id: 0- USB0, 1- USB1, 2- USB2 ;wifi_usbc_type: 1- EHCI(speed 2.0), 2- OHCI(speed 1.0) ;wl_reg_on: wifi function enable io ;wl_host_wake: wifi device wake-up host ;wl_host_wake_invert: whether wl_host_wake use inverter between ap and module ; 0: not used, 1: used ;-------------------------------------------------------------------------------- [wifi_para] wifi_used = 1 wifi_sdc_id = 1 wifi_usbc_id = 1 wifi_usbc_type = 1 (请严重注意这里的选择,不然开不了机:) wifi_mod_sel = 3 wifi_power = "" wifi_power_ext1 = "" wifi_power_ext2 = "" ; 1 - ap6181 sdio wifi gpio config ;ap6xxx_wl_regon = port:PL06<1><default><default><0> ;ap6xxx_wl_host_wake = port:PL07<4><default><default><0> ;ap6xxx_lpo_use_apclk = 1 ; 2 - ap6210 sdio wifi gpio config ;ap6xxx_wl_regon = port:PL06<1><default><default><0> ;ap6xxx_wl_host_wake = port:PL07<4><default><default><0> ;ap6xxx_bt_regon = port:PL08<1><default><default><0> ;ap6xxx_bt_wake = port:PL10<1><default><default><0> ;ap6xxx_bt_host_wake = port:PL09<4><default><default><0> ;ap6xxx_lpo_use_apclk = 1 ; 3 - rtl8188eu usb wifi gpio conifg ; 4 - rtl8723au usb wifi + bt ; 5 - rtl8723bs sdio wifi + bt ;rtl8723bs_chip_en = port:PL11<1><default><default><0> ;rtl8723bs_wl_regon = port:PL06<1><default><default><0> ;rtl8723bs_wl_host_wake = port:PL07<4><default><default><0> ;rtl8723bs_bt_regon = port:PL08<1><default><default><0> ;rtl8723bs_bt_wake = port:PL10<1><default><default><0> ;rtl8723bs_bt_host_wake = port:PL09<4><default><default><0> ;rtl8723bs_lpo_use_apclk = 0 ; 6 - eagle sdio wifi ;esp_wl_chip_en = port:PL03<1><default><default><0> ;esp_wl_rst = port:PL02<1><default><default><0> ; 7 - ap6476 sdio wifi gpio config ;ap6xxx_wl_regon = port:PL06<1><default><default><0> ;ap6xxx_wl_host_wake = port:PL07<4><default><default><0> ;ap6xxx_bt_regon = port:PL08<1><default><default><0> ;ap6xxx_bt_wake = port:PL10<1><default><default><0> ;ap6xxx_bt_host_wake = port:PL09<4><default><default><0> ;ap6xxx_lpo_use_apclk = 1 ; 8 - rtl8189es sdio wifi gpio conifg ;rtl8189es_shdn = port:PL06<1><default><default><0> ;rtl8189es_host_wake = port:PL07<4><default><default><0> (关闭这里,不然开不了机:) ;usb_vbus_power_ctrl = port:PL11<1><default><default><1> ;usb_eth_power_ctrl = port:PL04<1><default><default><1> ;-------------------------------------------------------------------------------- ;bluetooth configuration ;bt_used: 0- no used, 1- used ;bt_uard_id: 0- uart0, 1- uart1, 2- uart2 ;bt_rst_n: bt function enable io ;bt_wake: host wake-up bluetooth device ;bt_wak_host: bt device wake-up host ;bt_wake_invert: whether bt_wake use inverter between ap and module ; 0: not used, 1: used ;bt_host_wake_invert: whether bt_host_wake use inverter between ap and module ; 0: not used, 1: used ;-------------------------------------------------------------------------------- [bt_para] (关闭:) bt_used = 0 bt_uart_id = 1 bt_rst_n = port:PL08<1><default><default><0> bt_wake = port:PL10<1><default><default><0> bt_host_wake = port:PL09<4><default><default><0> bt_wake_invert = 0 bt_host_wake_invert = 0 ls_int = port:PB07<1><default><default><0> pcm_ch = port:PB05<1><default><default><0> power_start = 3 pmu_temp_enable = 0 请严重注意:WIFI配置错误全志R16的系统启动不了: dldo2_vol = 3300 dldo3_vol = 2800 ldoio0_vol = 2800 find power_sply to end vbus exist no battery, limit to dc dram_para_set start dram_para_set end [ 5.079]DRAM: 512 MiB relocation Offset is: 15b0b000 workmode = 16 NAND_UbootProbe start NB1 : enter phy init NandHwInit: Start Nand Hardware initializing ..... uboot:physical version: 2 1f 20141023 1640 [NAND] channel cnt is 1 ndfc version: 1 ndfc dma mode: MBUS DMA Reset NDFC 0 NFC Randomizer start. NFC_ResetChip: 0x101, 0x100 0x10095 NFC_ResetChip: 0xff, ch: 0 [PHY_DBG] CH 0 Nand flash chip id is:0xf0 0xf0 0xf0 0xf0 0xf0 0xf0 nand id of two channel is not the same, set to 1 channel mode [SCAN_DBG] Nand flash chip id is:0xf0 0xf0 0xf0 0xf0 0xf0 0xf0 [SCAN_ERR] search nand physical architecture parameter failed! [ERR]NandHwInit: SCN_AnalyzeNandSystem() failed! NandHwInit: End Nand Hardware initializing ..... FAIL! NB1 : nand phy init fail NB1 : enter phy Exit nand release dma:0 NAND_UbootProbe end: 0xffffffff try nand fail [ 5.191][mmc]: mmc driver ver 2014-11-25 17:03:00 [ 5.196][mmc]: get sdc_phy_wipe fail. [ 5.200][mmc]: get sdc0 sdc_erase fail. [ 5.204][mmc]: get sdc_2xmode ok, val = 1 [ 5.208][mmc]: get sdc_ddrmode fail used = 0 [ 5.213][mmc]: get sdc_f_max fail,use default 50000000Hz [ 5.218][mmc]: get card_line ok, card_line = 4 [ 5.223][mmc]: undefined value 0 or kernel not use auto sample,use default dly [ 5.230][mmc]: SUNXI SD/MMC: 2 [ 5.243][mmc]: *Try SD card 2* [ 5.246][mmc]: mmc 2 cmd 8 err 100 [ 5.252][mmc]: mmc send if cond failed [ 5.256][mmc]: mmc 2 cmd 55 err 100 [ 5.261][mmc]: send app cmd failed [ 5.264][mmc]: *Try MMC card 2* [ 5.315][mmc]: CID 0x1501004d 0x34473146 0x42005603 0x5fe0cebb [ 5.320][mmc]: MMC ver 4.41 [ 5.323][mmc]: mmc clk 50000000 [ 5.327][mmc]: SD/MMC Card: 4bit, capacity: 3728MB [ 5.332][mmc]: boot0 capacity: 1000KB,boot1 capacity: 1000KB [ 5.337][mmc]: ***SD/MMC 2 init OK!!!*** [ 5.342][mmc]: erase_grp_size:0x400WrBlk * 0x200 = 0x80000 Byte [ 5.348][mmc]: secure_feature 0x15 [ 5.351][mmc]: secure_removal_type 0x0 read flash error out of usb burn from boot: not boot mode In: serial Out: serial Err: serial
`DynamicServerListLoadBalancer` 是 Netflix Ribbon 中的一个负载均衡器,用于从服务注册中心获取服务列表并进行负载均衡。 在 Spring Boot 中,可以使用 Netflix Ribbon 和 Spring Cloud Netflix 来集成该负载均衡器。 具体实现方法如下: 1. 添加 Ribbon 和 Spring Cloud Netflix 依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> ``` 2. 创建一个配置类,并指定负载均衡器的实现类 ```java @Configuration public class RibbonConfiguration { @Bean public IRule ribbonRule() { // 指定负载均衡器的实现类为 ZoneAvoidanceRule return new ZoneAvoidanceRule(); } @Bean public IPing ribbonPing() { // 指定负载均衡器的心跳检测实现类为 NoOpPing return new NoOpPing(); } } ``` 这里使用 `ZoneAvoidanceRule` 作为负载均衡器的实现类,默认情况下是使用 `RoundRobinRule`。 3. 在启动类中添加注解 `@RibbonClients` ```java @SpringBootApplication @RibbonClients(defaultConfiguration = RibbonConfiguration.class) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 这里使用 `@RibbonClients` 注解来指定 Ribbon 的配置类,即 `RibbonConfiguration`。 这样,在 Spring Boot 启动,就会初始化 `DynamicServerListLoadBalancer`,从注册中心获取服务列表,并进行负载均衡。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值