u-boot-2012.10移植到AT91RM9200(包括NAND FLASH)
基于中嵌SRM9204
目 录
5 保存环境变量到NAND Flash和添加NAND 分区信息
6.2修改drivers/mtd/nand/nand_util.c
7.3 修改arch/arm/cpu/arm920t/at91/cpu.c
7.1注释掉include/config_cmd_default.h中一些不用的命令
7.2注释掉include/configs/at91rm9200ek.h中一些不用的命令
8.1配置:修改include/configs/at91rm9200ek.h
1 配置
1.1修改顶层Makefile(可选)
root@zjh:/home/work/u-boot-2012.10#vi Makefile
411 $(obj)u-boot.bin: $(obj)u-boot
412 $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
413 $(BOARD_SIZE_CHECK)
414 cp u-boot.bin /home/tftpboot 根据自己的环境修改交叉编译器前缀
我的交叉编译器版本为4.4.3
1.2配置
root@zjh:/home/work/u-boot-2012.10#vi boards.cfg
搜索at91
60 at91rm9200ek arm arm920t at91rm9200ek atmel at91 at91rm9200ek
61 at91rm9200ek_ram arm arm920t at91rm9200ek atmel at91 at91rm9200ek:RAMBOOT
可以看到有两行,一个是基于Flash启动,一个是基于RAM启动,我们先配置成基于RAM启动,编译后使用原有的u-boot将新的u-boot下载到RAM,通过go命令运行
root@zjh:/home/work/u-boot-2012.10#make at91rm9200ek_ram_config
root@zjh:/home/work/u-boot-2012.10#make
以上两步可合成一步
root@zjh:/home/work/u-boot-2012.10#make at91rm9200ek_ram
编译成功后,将生成u-boot.bin,如果进行了1.1,则会将u-boot.bin拷贝到tftp服务器目录/home/tftpboot
1.3下载、运行、测试
首先查看u-boot链接地址
root@zjh:/home/work/u-boot-2012.10#vi include/configs/at91rm9200ek.h
42 #ifdefCONFIG_RAMBOOT
43 #define CONFIG_SKIP_LOWLEVEL_INIT
44 #define CONFIG_SYS_TEXT_BASE 0x20100000
45 #else
46 #defineCONFIG_SYS_TEXT_BASE 0x10000000
47 #endif
我们配置为RAM启动,将会跳过底层初始化,这是链接地址为0x20100000
启动原有的u-boot,执行如下操作
U-Boot@zjh> tftpboot u-boot.bin
emac: Starting autonegotiation...
emac: Autonegotiation complete
emac: link up, 100Mbps full-duplex
Using emac device
TFTP from server 192.168.1.100; our IP address is 192.168.1.105
Filename 'u-boot.bin'.
Load address: 0x20100000
Loading: T ###############
done
Bytes transferred = 206924 (3284c hex)
U-Boot@zjh> go
## Starting application at 0x20100000 ...
U-Boot 2012.10 (Aug 02 2013 - 10:50:07)
DRAM: 32 MiB
WARNING: Caches not enabled
Flash: 8 MiB
In: serial
Out: serial
Err: serial
Net: emac
Hit any key to stop autoboot: 0
U-Boot>
2 修改内存配置参数(根据芯片手册修改)
2.1 修改配置参数
root@zjh:/home/work/u-boot-2012.10#vi include/configs/at91rm9200ek.h
83 #defineCONFIG_SYS_SDRAM_SIZE SZ_M
09 #defineCONFIG_SYS_SDRC_CR_VAL 0x2188c159 /* set up the CONFIG_SYS_SDRAM */
2.2 编译
root@zjh:/home/work/u-boot-2012.10#make distclean && make at91rm9200ek_ram
注:最后先make distclean,再编译,否则有时可能会有问题
2.3运行测试
启动原有的u-boot,执行如下操作
U-Boot@zjh> tftpboot u-boot.bin
emac:Starting autonegotiation...
emac:Autonegotiation complete
emac: linkup, 100Mbps full-duplex
Using emacdevice
TFTP fromserver 192.168.1.100; our IP address is 192.168.1.105
Filename'u-boot.bin'.
Load address:0x20100000
Loading: T###############
done
Bytestransferred = 206924 (3284c hex)
U-Boot@zjh>go 20100000
## Startingapplication at 0x20100000 ...
U-Boot2012.10 (Aug 02 2013 - 11:24:55)
DRAM: 64 MiB
WARNING:Caches not enabled
Flash: 8 MiB
In: serial
Out: serial
Err: serial
Net: emac
Hit any keyto stop autoboot: 0
U-Boot>
3 配置网络参数
3.1 配置
root@zjh:/home/work/u-boot-2012.10#vi include/configs/at91rm9200ek.h
146 /*
147 * Network Driver Setting
148 */
149 #defineCONFIG_DRIVER_AT91EMAC
150 #defineCONFIG_SYS_RX_ETH_BUFFER 16
151 #defineCONFIG_RMII
152 #defineCONFIG_MII
153
154 #define CONFIG_NETMASK 255.255.255.0
155 #define CONFIG_IPADDR 192.168.1.105
156 #define CONFIG_SERVERIP 192.168.1.100
157 #define CONFIG_ETHADDR 00:0c:29:4d:e4:f4
也可以不用配置,启动u-boot后跳过命令设置
3.2 编译
root@zjh:/home/work/u-boot-2012.10#make distclean && make at91rm9200ek_ram
3.3运行测试
启动原有的u-boot,执行如下操作
U-Boot@zjh> tftpboot u-boot.bin
emac:Starting autonegotiation...
emac:Autonegotiation complete
emac: linkup, 100Mbps full-duplex
Using emacdevice
TFTP fromserver 192.168.1.100; our IP address is 192.168.1.105
Filename'u-boot.bin'.
Load address:0x20100000
Loading:###############
done
Bytestransferred = 207016 (328a8 hex)
U-Boot@zjh>go 20100000
## Startingapplication at 0x20100000 ...
U-Boot2012.10 (Aug 02 2013 - 11:33:02)
DRAM: 64 MiB
WARNING:Caches not enabled
Flash: 8 MiB
In: serial
Out: serial
Err: serial
Net: emac
Hit any keyto stop autoboot: 0
U-Boot>ping 192.168.1.100
emac: linkup, 100Mbps full-duplex
Using emacdevice
host192.168.1.100 is alive
4 移植NANDFlash驱动
4.1 原理图
4.2配置
root@zjh:/home/work/u-boot-2012.10#vi include/configs/at91rm9200ek.h
70 #define CONFIG_ATMEL_LEGACY
137 #include<config_cmd_default.h>
138
140 #defineCONFIG_CMD_DHCP
141 #defineCONFIG_CMD_FAT
142 #defineCONFIG_CMD_MII
143 #defineCONFIG_CMD_PING
144 #defineCONFIG_CMD_USB
145 #undefCONFIG_CMD_FPGA
146 #define CONFIG_CMD_NAND
148 /* NAND flash */
149 #ifdef CONFIG_CMD_NAND
150 #define CONFIG_NAND_ATMEL
151 #define CONFIG_SYS_MAX_NAND_DEVICE 1
152 #define CONFIG_SYS_NAND_BASE 0x40000000 // CS3
153 #define CONFIG_SYS_NAND_DBW_8
154 #define CONFIG_SYS_NAND_MASK_ALE (1 << 22)
154 #define CONFIG_SYS_NAND_MASK_CLE (1 << 21)
155 #define CONFIG_SYS_NAND_ENABLE_PIN AT91_PIN_PC0
156 #define CONFIG_SYS_NAND_READY_PIN AT91_PIN_PC2
157 #endif
4.2添加代码
root@zjh:/home/work/u-boot-2012.10#vi drivers/mtd/nand/atmel_nand.c
34 #include <asm/arch/at91_pmc.h>
34 #include <asm/arch/at91_mc.h>
void nand_init_f(void)
{
at91_mc_t *mc = (at91_mc_t *)ATMEL_BASE_MC;
at91_pmc_t *pmc = (at91_pmc_t*)ATMEL_BASE_PMC;
u32 csa;
csa = readl(&mc->ebi.csa);
writel(csa | AT91_EBI_CSA_CS3A,&mc->ebi.csa);
writel(AT91_SMC_CSR_ACSS_STANDARD |AT91_SMC_CSR_DBW_8 | AT91_SMC_CSR_WSEN | \
AT91_SMC_CSR_NWS(5) | AT91_SMC_CSR_TDF(1)| AT91_SMC_CSR_RWSETUP(1) | \
AT91_SMC_CSR_RWHOLD(2),&mc->smc.csr[3]);
/* Enable PIOC clock */
writel(1 << ATMEL_ID_PIOC,&pmc->pcer);
at91_set_A_periph(AT91_PIN_PC1, 0); /* SMOE */
at91_set_A_periph(AT91_PIN_PC3, 0); /* SMWE */
at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);
at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 0);
}
ntatmel_nand_chip_init(int devnum, ulong base_addr)
{
int ret;
struct mtd_info *mtd =&nand_info[devnum];
struct nand_chip *nand =&nand_chip[devnum];
nand_init_f();
…
}
static voidat91_nand_hwcontrol(struct mtd_info *mtd,
int cmd, unsigned intctrl)
{
struct nand_chip *this = mtd->priv;
if (ctrl& NAND_CLE)
writeb(cmd, this->IO_ADDR_W + CONFIG_SYS_NAND_MASK_CLE);
else
writeb(cmd, this->IO_ADDR_W +CONFIG_SYS_NAND_MASK_ALE);
}
root@zjh:/home/work/u-boot-2012.10#vi drivers/mtd/nand/nand_base.c
#include<asm/arch/gpio.h>
#include<asm/arch/at91_pio.h>
static voidnand_select_chip(struct mtd_info *mtd, int chipnr)
{
switch (chipnr) {
case -1:
at91_set_gpio_value(CONFIG_SYS_NAND_ENABLE_PIN, 1);
break;
case 0:
at91_set_gpio_value(CONFIG_SYS_NAND_ENABLE_PIN, 0);
break;
default:
BUG();
}
}
4.3 编译
4.4 运行测试
启动原有的u-boot,执行如下操作
U-Boot@zjh> tftpboot u-boot.bin
emac:Starting autonegotiation...
emac:Autonegotiation complete
emac: linkup, 100Mbps full-duplex
Using emacdevice
TFTP fromserver 192.168.1.100; our IP address is 192.168.1.105
Filename'u-boot.bin'.
Load address:0x20100000
Loading: T##################
done
Bytestransferred = 250916 (3d424 hex)
U-Boot@zjh>go 20100000
## Startingapplication at 0x20100000 ...
U-Boot 2012.10(Aug 05 2013 - 15:05:34)
DRAM: 64 MiB
WARNING:Caches not enabled
Flash: 8 MiB
NAND: 128 MiB
In: serial
Out: serial
Err: serial
Net: emac
Hit any keyto stop autoboot: 0
U-Boot>
5 保存环境变量到NAND Flash和添加NAND 分区信息
5.1 配置环境变量保存到NAND
root@zjh:/home/work/u-boot-2012.10#vi include/configs/at91rm9200ek.h
//#define CONFIG_ENV_IS_IN_FLASH
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_OFFSET 0x0
#defineCONFIG_ENV_SIZE SZ_128K
5.2 配置支持NAND 分区信息
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE
#define MTDIDS_DEFAULT "nand0=at91rm9200-0"
/* writeable partitions require their size and offset beerasesize aligned */
#define MTDPARTS_DEFAULT "mtdparts=at91rm9200-0:128k(params),"\
"4m(kernel),"\
"-(rootfs)"
5.3编译
5.4 运行测试
启动原有的u-boot,执行如下操作
U-Boot@zjh> tftpboot u-boot.bin
……
U-Boot2012.10 (Aug 05 2013 - 15:22:35)
DRAM: 64 MiB
WARNING:Caches not enabled
Flash: 8 MiB
NAND: 128 MiB
In: serial
Out: serial
Err: serial
Net: emac
Hit any keyto stop autoboot: 0
U-Boot>save
SavingEnvironment to NAND...
ErasingNand...
Erasing at0x0 -- 100% complete.
Writing toNand... done
U-Boot>mtd default
U-Boot>save
SavingEnvironment to NAND...
ErasingNand...
Erasing at0x0 -- 100% complete.
Writing toNand... done
U-Boot>mtd
device nand0<at91rm9200-0>, # parts = 3
#: name size offset mask_flags
0: params 0x00020000 0x00000000 0
1: kernel 0x00400000 0x00020000 0
2: rootfs 0x07be0000 0x00420000 0
activepartition: nand0,0 - (params) 0x00020000 @ 0x00000000
defaults:
mtdids : nand0=at91rm9200-0
mtdparts:mtdparts=at91rm9200-0:128k(params),4m(kernel),-(rootfs)
U-Boot>
6 支持烧写yaffs2文件系统
6.1配置
root@zjh:/home/work/u-boot-2012.10#vi include/configs/at91rm9200ek.h
#define CONFIG_CMD_NAND_YAFFS
6.2修改drivers/mtd/nand/nand_util.c
if (!need_skip && !(flags& WITH_DROP_FFS) && !(flags &WITH_YAFFS_OOB)) {
rval= nand_write (nand, offset, length, buffer);
if(rval == 0)
return0;
*length= 0;
printf("NAND write to offset %llx failed %d\n",
offset,rval);
returnrval;
}
……
if(flags & WITH_YAFFS_OOB) {
intpage, pages;
size_tpagesize = nand->writesize;
size_tpagesize_oob = pagesize + nand->oobsize;
structmtd_oob_ops ops;
ops.len= pagesize;
ops.ooblen= nand->oobsize;
ops.mode= MTD_OOB_RAW;
ops.ooboffs = 0;
……
6.3 编译、运行测试
7 打印CPU时钟信息并添加自己的log
7.1 配置
root@zjh:/home/work/u-boot-2012.10#vi include/configs/at91rm9200ek.h
#define CONFIG_DISPLAY_CPUINFO
7.2 修改arch/arm/lib/board.c
static int display_banner(void)
{
printf("\n\n%s\n\n",version_string);
printf("----成都思晗科技有限公司-----赵建辉\n\n");
debug("U-Bootcode: %08lX -> %08lX BSS: ->%08lX\n",
_TEXT_BASE,
_bss_start_ofs + _TEXT_BASE,_bss_end_ofs + _TEXT_BASE);
#ifdef CONFIG_MODEM_SUPPORT
debug("ModemSupport enabled\n");
#endif
#ifdef CONFIG_USE_IRQ
debug("IRQStack: %08lx\n", IRQ_STACK_START);
debug("FIQStack: %08lx\n", FIQ_STACK_START);
#endif
return(0);
}
7.3 修改arch/arm/cpu/arm920t/at91/cpu.c
#ifdefined(CONFIG_DISPLAY_CPUINFO)
intprint_cpuinfo(void)
{
char buf[32];
printf("CPU: %s\n",CONFIG_SYS_ATMEL_CPU_NAME);
printf("Crystal frequency: %8sMHz\n",
strmhz(buf,get_main_clk_rate()));
printf("CPU clock : %8s MHz\n",
strmhz(buf,get_cpu_clk_rate()));
printf("Master clock : %8s MHz\n",
strmhz(buf,get_mck_clk_rate()));
return 0;
}
#endif
7.4 编译
7.5运行测试
## Startingapplication at 0x20100000 ...
U-Boot2012.10 (Aug 05 2013 - 15:54:35)
----成都思晗科技有限公司-----赵建辉
CPU: AT91RM9200
Crystal frequency: 18.432 MHz
CPU clock : 179.712 MHz
Master clock : 59.904 MHz
DRAM: 64 MiB
WARNING:Caches not enabled
Flash: 8 MiB
NAND: 128 MiB
In: serial
Out: serial
Err: serial
Net: emac
Hit any keyto stop autoboot: 0
U-Boot>
7 精简u-boot
7.1注释掉include/config_cmd_default.h中一些不用的命令
//#define CONFIG_CMD_CONSOLE /* coninfo */
//#define CONFIG_CMD_EDITENV /* editenv */
//#define CONFIG_CMD_FPGA /* FPGA configuration Support */
//#define CONFIG_CMD_IMI /* iminfo */
//#define CONFIG_CMD_ITEST /* Integer (and string) test */
//#define CONFIG_CMD_LOADS /* loads */
//#define CONFIG_CMD_MISC /* Misc functions like sleep etc*/
//#define CONFIG_CMD_NFS /* NFS support */
//#define CONFIG_CMD_SETGETDCR /* DCR support on 4xx */
//#define CONFIG_CMD_SOURCE /* "source" command support */
//#define CONFIG_CMD_XIMG /* Load part of Multi Image */
7.2注释掉include/configs/at91rm9200ek.h中一些不用的命令
//#define CONFIG_CMD_DHCP
//#define CONFIG_CMD_FAT
//#define CONFIG_CMD_USB
//#undef CONFIG_CMD_FPGA
……
/*
* USB Config
*/
#ifdef CONFIG_CMD_USB
#defineCONFIG_USB_ATMEL 1
#defineCONFIG_USB_OHCI_NEW 1
#defineCONFIG_USB_KEYBOARD 1
#defineCONFIG_USB_STORAGE 1
#defineCONFIG_DOS_PARTITION 1
#defineCONFIG_SYS_USB_OHCI_CPU_INIT 1
#defineCONFIG_SYS_USB_OHCI_REGS_BASE ATMEL_USB_HOST_BASE
#defineCONFIG_SYS_USB_OHCI_SLOT_NAME "at91rm9200"
#defineCONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 15
#endif
7.3编译
root@zjh:/home/work/u-boot-2012.10#make distclean && make at91rm9200ek_ram
查看u-boot.bin大小
root@zjh:/home/work/u-boot-2012.10#ll -h u-boot.bin
-rw-r--r-- 1root root 203K 2013-08-05 16:25 u-boot.bin
之前是260k
7.4运行测试
启动原有的u-boot,执行如下操作
U-Boot2012.10 (Aug 05 2013 - 16:24:26)
----成都思晗科技有限公司-----赵建辉
CPU:AT91RM9200
Crystalfrequency: 18.432 MHz
CPUclock : 179.712 MHz
Masterclock : 59.904 MHz
DRAM: 64 MiB
有点问题
8 支持NOR Flash启动
8.1配置:修改include/configs/at91rm9200ek.h
#ifdefCONFIG_RAMBOOT
#defineCONFIG_SKIP_LOWLEVEL_INIT
#defineCONFIG_SYS_TEXT_BASE 0x20100000
#else
#defineCONFIG_SYS_TEXT_BASE 0x00000000
#endif
8.2编译
root@zjh:/home/work/u-boot-2012.10#make distclean && make at91rm9200ek
8.3烧写u-boot.bin到NOR FLASH
U-Boot@zjh>tftp 21000000 u-boot.bin
emac:Starting autonegotiation...
emac:Autonegotiation complete
emac: linkup, 100Mbps full-duplex
Using emacdevice
TFTP fromserver 192.168.1.100; our IP address is 192.168.1.105
Filename'u-boot.bin'.
Load address:0x21000000
Loading: T###############
done
Bytestransferred = 207836 (32bdc hex)
U-Boot@zjh>protect off all
Un-ProtectFlash Bank # 1
.......................................................................................................................................done
U-Boot@zjh>erase 10000000 +3ffff
...........done
Erased 11sectors
U-Boot@zjh>cp.b 21000000 10000000 3ffff
Copy toFlash... done
U-Boot@zjh>reset
resetting ...
U-Boot2012.10 (Aug 05 2013 - 16:32:02)
----成都思晗科技有限公司-----赵建辉
CPU: AT91RM9200
Crystalfrequency: 18.430 MHz
CPUclock : 179.692 MHz
Masterclock : 59.897 MHz
DRAM: 64 MiB
WARNING:Caches not enabled
Flash: 8 MiB
NAND: 128 MiB
In: serial
Out: serial
Err: serial
Net: emac
Hit any keyto stop autoboot: 0
U-Boot>
u-boot-2012.10移植到AT91RM9200(包括NAND FLASH)的更多相关文章
- linux2.6.30.4内核移植(2)——Nand Flash驱动移植
内核源码:linux2.6.30.4 交叉编译工具:3.4.5 移植linux内核至:TQ2440 工作基础:http://www.cnblogs.com/nufangrensheng/p/36696 ...
- Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写
很长一段时间没有更新博客了,是因为要推出新开发方案和做好客户服务工作,忙得不易乐乎.有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-bo ...
- table-cell http://www.cnblogs.com/StormSpirit/archive/2012/10/24/2736453.html
http://www.cnblogs.com/StormSpirit/archive/2012/10/24/2736453.html
- ok6410 u-boot-2012.04.01移植六完善MLC NAND支持
继ok6410 u-boot-2012.04.01移植四.五后,开发板基本已支持MLC NAND,支持DM9000.但是通过NAND命令更新u-boot到NAND,还存在问题,需要根据u-boot的n ...
- DM6446开发攻略:UBOOT-2009.03移植及nand flash烧写
有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-boot-2009.03差别不大,只不过这个u-boot-2009.03是从TI的网站上下载 ...
- u-boot移植总结(三)(转)S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)
S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A) 转载自:http://www.cnblogs.com/idle_man/archive/2010/12/23/19153 ...
- s5pc100开发板Nand flash移植
相关软件下载地址:http://pan.baidu.com/s/16yo8Y fsc100开发板 交叉编译工具:arm-cortex_a8-linux-gnueabi-gcc 添加针对我们平台 ...
- [hi3521] nand flash 的 boot 启动模式的区别?
spi nand flash 的 boot 启动模式选择.0:1 线 boot:1:4 线 boot.请问,1线boot和4线boot有什么区别呢?该如何选择呢? 收藏 顶 踩 回复 使用 ...
- Spring Boot 的 10 个核心模块
学习 Spring Boot 必须得了解它的核心模块,和 Spring 框架一样,Spring Boot 也是一个庞大的项目,也是由许多核心子模块组成的. 你所需具备的基础 告诉你,Spring Bo ...
随机推荐
- (转)HTTP请求中URL地址的编码和解码
HTTP请求中,类似 http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fv3Jump.html 的地址 如何解码成 http://www ...
- 【poj3294-不小于k个字符串中最长公共子串】后缀数组
1.注意每两个串之间的连接符要不一样. 2.分组的时候要注意最后一组啊!又漏了! 3.开数组要考虑连接符的数量.100010是不够的至少要101000. #include<cstdio> ...
- [HNOI2015]部分题解
Day1 T2 [HNOI2015]接水果 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, 她觉得这个游戏太简单了, ...
- HDU1267 下沙的沙子有几粒? 基础DP
题目链接 题意:给定m个H和n个D(1<=n,m<=20),问这些字母构成的序列中,对于任意位置,从左开始数H的累积个数总是不比D的累计数少的排列有多少种. 题解:二维DP,画一个正方形, ...
- onvif实现
前言 负责开发了公司的onvif,一个人从0开始写的,花了两个月 !!!下面是我的总结. onvif介绍 ONVIF[Open Network Video Interface Forum](开放型网络 ...
- PL/SQL 08 异常 exception
--PL/SQL错误 编译时 运行时 --运行时的出错处理 EXCEPTION --异常处理块DECLARE …BEGIN …EXCEPTION WHEN OTHERS THEN handle ...
- 聊聊C++模板函数与非模板函数的重载
前言 函数重载在C++中是一个很重要的特性.之所以有了它才有了操作符重载.iostream.函数子.函数适配器.智能指针等非常有用的东西. 平常在实际的应用中多半要么是模板函数与模板函数重载,或者是非 ...
- python特有的协程
#转载请联系 什么是协程呢? 线程包含在进程里面,协程包含在线程里面.协程也是和进程.线程一样,可以实现多任务.协程的切换开销比线程更小,不需要保存和恢复线程的状态.最通俗易懂的说法就是,协程是就是一 ...
- Selenium2+python自动化61-Chrome浏览器(chromedriver)【转载】
前言 selenium2启动Chrome浏览器是需要安装驱动包的,但是不同的Chrome浏览器版本号,对应的驱动文件版本号又不一样,如果版本号不匹配,是没法启动起来的. 一.Chrome遇到问题 1. ...
- 第一篇:动态防火墙firewalld和静态防火墙iptables
动态防火墙firewalld firewalld提供了一个动态管理的防火墙,它支持网络(network)/防火墙区域(firewall zones )来定义网络连接( network connecti ...