【分享】iTOP4412开发板-Bluetooth移植文档

最近须要把Bluetooth移植到iTOP-4412 开发平台。查阅了相关资料,经过一段时间的研究、调试,最终成功的将蓝牙功能移植到了开发板上面。这里笔者记录移植过程及注意事项,方便以后工作须要。

iTOP-4412开发板的Bletooth模块与板卡之间的连接採用UART接口。Bletooth硬件模块使用的是MTK的MT6620芯片,MTK提供了Android4.0及Android4.4的driver, Porting Guid,有了这些就为我们的移植工作做了整体性的指导。

可是唯独MTK提供的文档还是远远不够的,毕竟硬件接口定义不同,kernel版本号也不同,Android层与MTK提供的代码也有差异。这就须要我们在MTK文档的指导下, Step  by Step 进行 Porting 工作.

移植环境:

1  iTOP-4412 精英版 +  MT6620 Bletooth模块

2  kernel  3.0.15  version

3  Android4.4.

4  Ubuntu12.04  64BIt 开发环境

文件夹

文件夹 1

1.1  概述 1

1.2  硬件相关部分 2

1.3  Kernel 4

1.3.1 概述 4

1.3.2 代码改动 5

1.4  用户态空间 8

1.5  HAL层移植 9

1.5.1  Bluedroid 10

1.5.2  init.connectivity.rc 文件 12

1.5 总结 12

1.2  硬件相关部分

因为MT6620 芯片集成了Bluetooth。WiFi, FM,GPS功能。所以Bluetooth的原理图可查看 MT6620 WiFi原理图部分,下图为Bletooth模块与开发板连接的引脚定义。通过该接口能够知道Bluetooth模块与CPU的交互接口.

▆  UART 串口: Bluetooth与CPU之间的通信接口,命令和数据的传输都是经过串口交换的。

另外MT6620固件补丁的下载也是通过串口进行的,所以说串口是不可缺少的硬件接口。上图中 Pin8,Pin10 为串口部分,与CPU的串口0连接.

▆ MT6620 芯片使能引脚:  Pin16  PMU_EN 。使能引脚,默认低电平状态,高电平有效, 启用蓝牙功能之前须要先使能该引脚,这样MT6620才開始工作。

▆ 中断引脚:Pin 14  BGF_INT , Blutooh, GPS,FM共用的中断引脚,用于告知CPU有数据来了,或者说有请求到了.

▆  复位引脚: Pin15 WiFi_RESET 。该引脚与MT6620的SYSRST_B连接,用于芯片的复位操作.

▆ 芯片工作电压:Pin12提供1.8V的电压输入。Pin19提供3.3V,Pin20提供5V电压输入.

下图为MT6620模块原理图部分:

MT6620的引脚定义例如以下:

以上是进行Porting前的准备工作,当然须要万用表。示波器工具进行辅助的检測。查看Bluetooth模块的工作电压是否正常,GPIO的当前状态。串口的数据波形.

另外须要强调的是,MT6620 Bluetootch支持蓝牙4.0规范,蓝牙4.0规范包含常规蓝牙。快速蓝牙,还有非常重要的低功耗蓝牙,即BLE的支持,以下是MT6620蓝牙特性:

▆ 支持Bluetooth V2.1 +EDR

▆ 支持Bluetooth 3.0+HS compliance

▆ 支持Bluetooth V4.0 Low Energy (LE)

▆ 使用UART / PCM 接口

▆ 模組包括PA with 13 dBm (class 1) transmit power

▆ Better WiFi/BT coexistence performance

▆ Low power scan function to reduce the power consumption in scan modes

关于MT6620的很多其它硬件特性,请參考MTK官方公布的MT6620硬件使用指导相关文档.

1.3  Kernel

1.3.1 概述

iTOP4412开发板採用的内核是Linux 3.0.15 版本号,MTK官方给的移植Porting没有说明针对详细的 kernel版本号,因为是Android4.4,所以kernel应该是3.0以后的版本号或者更高支持;

首先依照PoringGuid的指导说明。把New和Modify文件夹以下关于kernel部分的改动放到我们的kernel代码里面。 把MT6620的驱动放在driver/misc/文件夹以下,文件夹名称 mediatek,里面存放的是WMT,既wireless manage tools, 里面提供了与MT6620  download  firmware patch 。enable /disable MT6620芯片,power on, power off操作的相关驱动部分, 及SDIO总线设备接口驱动Host Interface drivers. 蓝牙驱动mtk_stp_bt.ko 的源代码也在这个文件夹以下,我们以驱动库 .ko 的形式编译驱动模块.

driver/misc/mediatek/ 库文件列表例如以下::

mtk_hif_sdio.ko ----mmc总线相关接口。mmc总线发现SDIO设备,分配总线地址后,会与该驱动进行适配.适配成功后该驱动会调用WiFi网络驱动,另外Bluetooth也使用了该驱动库文件提供的对应接口;

mtk_stp_uart.ko-----串口相关驱动,通过串口下载固件补丁,设置芯片參数;

mtk_stp_wmt.ko-----core 部分,提供Bluetooth上电,断电,PSM省电管理操作等

mtk_stp_bt.ko ----字符设备驱动,创建Bluetooth设备节点用于与用户空间交互;

另外这里附一张Blutooth Kernel层驱动层次图:

上图红色部分 BlueZ, Hci_stp.ko为Android4.0 Bluetooth使用的蓝牙协议栈与Kernel库文件。

蓝色部分Bluedroid, mtk_stp.bt.ko 为Android4.4 版本号使用的蓝牙协议栈与kernel库文件。

Android4.0与Android4.4关于Bluetooth部分变化比較大,请大家移植过程中注意这一点,他们之间的详细差异这里不再解说。

从上图能够看到 bluetooth驱动调用关系:

mtk_stp_bt.ko -> mtk_stp_wmt.ko -> mtk_stp_uart.ko -> uart driver

最后最底层的串口驱动负责蓝牙命令,数据的发送与接收.

1.3.2 代码改动

1  依据硬件连接情况配置必要的平台资源

改动文件:  kernel/iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c

关键函数: 该函数配置MT6620相关的GPIO引脚为初始化输出状态。或者配置为中断状态,Bluetooth驱动会改变这些引脚的状态,这里不过初始化.

static void __init mtk_combo_init(void)

{

//MT66XX PMUEN

if(gpio_request(EXYNOS4_GPC1(0), "GPC1_0"))

{

printk(KERN_ERR "failed to request GPC1_0 for MT6620  PMUEN control\n");

}

//MT66XX SYSRST

if(gpio_request(EXYNOS4_GPC1(1), "GPC1_1"))

{

printk(KERN_ERR "failed to request GPC1_1 for MT6620  SYSRST control\n");

}

s3c_gpio_cfgpin(EXYNOS4_GPC1(0), S3C_GPIO_OUTPUT);

s3c_gpio_cfgpin(EXYNOS4_GPC1(1), S3C_GPIO_OUTPUT);

gpio_direction_output(EXYNOS4_GPC1(0), 0);

gpio_direction_output(EXYNOS4_GPC1(1), 0);

gpio_free(EXYNOS4_GPC1(0));

gpio_free(EXYNOS4_GPC1(1));

mdelay(5);

//need config eint models for Wifi & BGA Interupt

if (gpio_request(EXYNOS4_GPX2(5), "WiFi INT"))

printk(KERN_WARNING "MT6620 WiFi INT(GPX2.5) Port request error!!!\n");

else    {

s3c_gpio_setpull(EXYNOS4_GPX2(5), S3C_GPIO_PULL_NONE);

s3c_gpio_cfgpin(EXYNOS4_GPX2(5), S3C_GPIO_SFN(0xF));

gpio_free(EXYNOS4_GPX2(5));

}

if (gpio_request(EXYNOS4_GPX2(4), "BGF INT"))

printk(KERN_WARNING "MT6620 BGA INT(GPX2.4) Port request error!!!\n");

else    {

s3c_gpio_setpull(EXYNOS4_GPX2(4), S3C_GPIO_PULL_NONE);

s3c_gpio_cfgpin(EXYNOS4_GPX2(4), S3C_GPIO_SFN(0xF));

gpio_free(EXYNOS4_GPX2(4));

}

//normal it is high level

if (gpio_request(EXYNOS4_GPX3(2),  "6260_GPIO2")!=0) {

printk("[mt6620] ERROR:Cannot request 6260_GPIO2\n");

} else {

gpio_direction_output(EXYNOS4_GPX3(2), 1);/* WLAN_CHIP_PWD */

gpio_set_value(EXYNOS4_GPX3(2), 1);

mdelay(100);

gpio_free(EXYNOS4_GPX3(2));

}

return; }

关键结构体: 该结构体告诉MT6620驱动相关部分使用了平台的哪些GPIO资源.

结构体所属文件: kernel/iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c

static struct mtk_wmt_platform_data mtk_wmt_pdata = {

.pmu =EXYNOS4_GPC1(0), //RK30SDK_WIFI_GPIO_POWER_N,//RK30_PIN0_PB5, //MUST set to pin num in target system

.rst = EXYNOS4_GPC1(1),//RK30SDK_WIFI_GPIO_RESET_N,//RK30_PIN3_PD0, //MUST set to pin num in target system

.bgf_int=EXYNOS4_GPX2(4), //IRQ_EINT(20),//RK30SDK_WIFI_GPIO_BGF_INT_B,//RK30_PIN0_PA5,//MUST set to pin num in target system if use UART interface.

.urt_cts = -EINVAL, // set it to the correct GPIO num if use common SDIO, otherwise set it to -EINVAL.

.rtc = -EINVAL, //Optipnal. refer to HW design.

.gps_sync = -EINVAL, //Optional. refer to HW design.

.gps_lna = -EINVAL, //Optional. refer to HW design.

};

static struct mtk_sdio_eint_platform_data mtk_sdio_eint_pdata = {

.sdio_eint = EXYNOS4_GPX2(5),//IRQ_EINT(21) ,//RK30SDK_WIFI_GPIO_WIFI_INT_B,//53, //MUST set pin num in target system.

};

static struct platform_device mtk_wmt_dev = {

.name = "mtk_wmt",

.id = 1,

.dev = {

.platform_data = &mtk_wmt_pdata,

},

};

static struct platform_device mtk_sdio_eint_dev = {

.name = "mtk_sdio_eint",

.id = 1,

.dev = {

.platform_data = &mtk_sdio_eint_pdata,

},

};

MTK 官方移植文档中会告诉我们须要在原始内核代码里面添加哪些文件,怎样在make menuconfig中配置相关部分。这里就不再具体描写叙述.

注意:蓝牙驱动尽管没有使用到mmc总线,可是mtp_hif_sdio.ko 驱动导出了接口函数。mtk_stp_wmt.ko 核心驱动库会调用导出函数,所以mtp_hif_sdio.ko须要载入到内核空间,假设您的产品中不含有WiFi。 只须要Bluetooth功能,那么全然能够不用配置MMC总线部分,不影响蓝牙的使用,可是务必载入mtp_hif_sdio.ko文件。

另外MT6620 具备功耗控制功能,默认情况下假设MT6620 处于idle空暇状态,空暇时间大于60秒后,会自己主动进入sleep状态。有中断触发时会唤醒,继续工作,您能够使用 "echo 0 0  > /proc/driver/wmt_dbg "命令关闭功耗控制。这样MT6620会始终不会进入sleep状态。另外也能够改动MT6620 mtk_stp_wmt.ko驱动中的參数。更改ide  to  sleep的时间.

MTK 官方提供的驱动代码中芯片默认 idle   5 秒后会进入sleep  状态。使用蓝牙接收文件时,假设用户响应时间超过了5秒(用户没有单击接收或者拒绝button),MT6620会休眠,驱动会导致MT6620会进入RESET状态。从而Bluetooth服务会出现故障。Bluetooth功能不可使用,为了避免这种问题发生。我们把休眠时间由默认的 5秒调整到了60 秒,给用户足够多的响应时间,用户在60秒内 接收或者拒绝蓝牙手机发给板卡的文件。另外文件接收完毕后,须要单击状态栏中的文件接收完毕提示,尽量在Android4.4 状态栏中不含有关于蓝牙消息的提醒。

u

1.4  用户态空间

以下我们描写叙述一下採用Linux系统和Android系统的用户都须要注意的地方:

驱动层移植完毕后, MTK的Porting Guid会告诉你须要在用户态执行wmt_launcher工具。作为后台的一个服务程序执行。该服务会配置串口的工作參数,下载固件补丁到MT6620中,他的源码相对照较简单,仅仅有一个.c文件:

原始文件位于MTK公布包:

APEX_Android_4.4_MP_SW_package_V2.0/APEX_Android_4.4_MP_001_panda_combo_mt66xx_Package_Common/New/hardware/mediatek/wmt/stp_uart_launcher.c

改动后的文件位于iTOP-4412 Android4.4公布包:

iTop4412_KK4.4/hardware/mediatek/wmt/stp_uart_launcher.c

改动点主要在串口參数配置上,因为内核版本号不同,串口设置參数也略有不同.

详细改动能够使用代码比对工具进行比較。

另外须要说明的是执行wmt_launcher的执行參数 跟MTK给的移植文档有点不同,Porting Guid 里面推荐串口波特率使用921600, 而在iTOP-4412的板子上面採用该值会工作不正常,导致固件补丁无法下载,開始怀疑板卡不支持该波特率,后使用串口測试工具专门针对这个串口进行921600測试。也没发现问题,后没有继续查找。而是执行wmt_launcher时採用115200波特率:

wmt_launcher  -b 115200  -d  /dev/ttySAC0  -p  /system/etc/firmware &

注意:  假设您的操作系统使用的是Linux而不是Android。须要改动stp_uart_launcher.c

原始代码里面有Android特有的属性相关部分。Linux系统不具有这个特性,我们提供了改动好的文件:stp_uart_launcher-linux-ok.c 。用户能够作为參考。该文件与原始文件stp_uart_launcher-ori.c。及正常工作的文件 stp_uart_launcher.c 位于同样文件夹以下.

不管是Linux系统还是Android系统,挂载根文件系统以后须要执行 wmt_launcher 服务,该服务在后台执行。打开 /dev/ttySAC0 串口,监控着串口上报的事件。对事件进行响应,比方内核上报 "下载固件补丁" 事件,那么wmt_launcher会打开  /system/etc/firmware以下的固件补丁,然后下载到MT6620模块中,该服务不能够被用户终止执行.

1.5  HAL层移植

Bluetooth的HAL层主要有 Bluedroid 协议栈与MT6620 vendor提供底层库文件组成。

须要我们重点关注的有 bluetooth.default.so  该动态库文件提供了 Framework层调用HAL层的 API 接口,同一时候向下调用 libbt-hci.so 。

bluetooth.default.so包括两个静态库:libbt-brm_stack.a   libbt-brm_bta.a .  libbt-brm_stack.a提供Bluetooth  各种profiles的支持, 比方  a2dp,hid,pan 等等, libbt-brm_bta.a   用于与framdwork层进行通信.

libbt-hci.so 该动态库提供bluetooth.default.so的底层支持,另外他会调用 libbt-vendor.so 接口,

通过串口发送,接收命令,数据的操作也是通过该动态库实现的。他位于bluedroid源代码文件夹

hci 目录下。

libbt-vendor.so 厂商库文件。用于实现厂商提供的蓝牙模块特性支持,库文件位于android4.4/iTop4412_KK4.4/hardware/mediatek/bt/combo_mt66  文件夹下。

1.5.1  Bluedroid

从Android 4.2開始。Bluetooth stack发生了重大改变:从Bluez换成了由Google和Broadcom联合开发的Bluedroid(当然,核心的部分还是Broadcom的。Google主要是做了和上层Framework相关的部分)。

Bluedroid和Bluez相比,有例如以下长处:

■ 层次结构清晰。各个profile对上层接口统一。便于添加新的profile;

■ 添加了HAL层,便于移植。

■ 去掉了DBus。Framework的Java代码直接调用到Bluedroid的Native代码。

可是Android 4.2中的Bluedroid与Android 4.0中的Bluez相比。功能要少,比如不支持AVRCP 1.3, Bug较多。比如某些蓝牙耳机不能重拨最后一个电话。最重要的是4.2的Bluedroid不支持BLE。只是在刚刚公布的Android 4.3中已经有了非常多改进,AVRCP 1.3和BLE都得到了支持。

眼下有一些Android 4.1或4.2的设备是支持BLE的,可是都是採用的Vendor自己的解决方式,比方Bluetooth stack採用Bluez 5.x,再提供Vendor BLE Android SDK. 如今Android 4.4已经公布,从未来发展趋势来看,假设有人要学习Bluetooth in Android,建议不要再研究Bluez,最好转向Bluedroid。

下面是Android 4.4 中Bluetooth相关代码之分布:

android.bluetooth frameworks/base/core/java/android/bluetooth implements public API for the Bluetooth adapter and profiles

Bluetooth system service packages/apps/Bluetooth/src implements service and profiles at the Android fraework layer

Bluetooth JNI packages/apps/Bluetooth/jni defines Bluetooth adapter and profiles service JNI: calls into HAL and receives callback from HAL

Bluetooth HAL hardware/libhardware/include/hardware/bt_*.h files defines the standard interface that the android.bluetooth adapter and  profiles APIs

Bluetooth stack external/bluetooth/bluedroid implement bluetooth stack: core and profiles

笔者在进行Bluetooth的调试过程中。使用Logcat 命令输出Android的调试信息,在Android的Setting界面开启蓝牙功能,依据信息打印的输出,发现Enable Bluetooth的过程中出现了问题,最后查找原因是由于MT6620芯片工作前须要须要下载固件补丁,这个过程须要花费一定的时间,然后bluetooth.default.so 库文件代码中对开启Bluetooth有一定的时间限制,默认情况下是3000毫秒的超时时间,超时后会disable 蓝牙,后经笔者改动为20 000 毫秒,这样就可以enable蓝牙芯片。从而进入工作状态.

改动文件:  iTop4412_KK4.4/external/bluetooth/bluedroid/Android.mk

1.5.2  init.connectivity.rc 文件

init.connectivity.rc 文件路径:

iTop4412_KK4.4/hardware/mediatek/config/combo_mt66xx/ init.combo_mt66xx.rc

原始文件名为 init.combo_mt66xx.rc,复制到ramdisk的root文件夹以下名称变更为init.connectivity.rc文件 。

我们在该文件添加了载入驱动模块库操作,执行wmt_lanucher服务操作。另外须要注意文件原有的创建bluetooth相关文件夹操作,及改动权限,变更拥有者,这些command很的重要。比方:

# Load Blue module

insmod /system/lib/modules/mtk_stp_bt.ko

chmod 0660 /dev/stpbt

chown bluetooth system /dev/stpbt

mkdir /data/bluetooth 0711 bluetooth bluetooth

mkdir /data/misc/bluedroid 0771 bluetooth bluetooth

1.5 总结

用户在移植HAL层之前能够先使用MTK提供的蓝牙測试工具autobt进行測试。该測试工具脱落复杂的HAL层,直接调用libbt-vendor.so 也就是厂商自己的库文件。在Android的命令行中运行就可以,能够使用该命令查询其它的蓝牙设备,发送。接收文件等等。

是推断蓝牙硬件是否正常工作的有力工具。使用autobt測试通过后,再调试Android HAL及上层部分。

autobt工具的源代码位于:

iTop4412_KK4.4/hardware/mediatek/utility/hw_test_tool/bluetooth/src/tool

另外MTK官方提供了Bluetooth的多个补丁,路径:

APEX_Android_4.4_MP_SW_package_V2.0/Document/BT_patch_description(must read)

这些补丁是比較重要的,有关于蓝牙基础连接方面的,也有关于蓝牙文件发送接收。蓝牙鼠标,蓝牙耳机方面的。须要依据您的产品需求打相应的补丁,我们公布的Android4.4代码中已经打上了蓝牙基础连接,和文件发送接收方面的补丁,其它的补丁未处理.

HAL层改动完毕后在Android4.4的Setting里面打开Bluetooth,就能够扫描到其它蓝牙设备,然后进行配对,配对完毕后就能够进行文件的传输操作了。笔者仅測试了蓝牙的文件发送与接收功能,其它的蓝牙功能比方蓝牙耳机。蓝牙鼠标的使用均未进行測试。只是有了文件发送接收的測试基本说明了蓝牙的Porting是OK的,假设您有兴趣或者需求,能够移植蓝牙其它更丰富的功能与应用。

【分享】iTOP4412开发板-Bluetooth移植文档的更多相关文章

  1. [资料分享]迅为iTOP4412开发板-SDIO WiFi移植文档

    本文转自迅为:http://www.topeetboard.com 概述 近期需要把WiFi无线网络功能移植到iTOP-4412 开发平台,查阅了相关资料,经过一段时间的研究.调试,终于成功的将WiF ...

  2. iTOP-4412开发板-串口转接小板的使用文档

    本文档介绍如何使用 迅为iTOP-4412 精英版如何使用串口转接板,串口小板如下所示.和串口转接板模块相关的资料如下:“iTOP-4412-Android-串口测试文档(升级版)_V2.X.zip” ...

  3. 移植opencv2.4.9到itop4412开发板

    OpenCV是眼下开源项目中最著名的基于机器视觉方向的图像处理的开发包,眼下已经有被移植到嵌入式Linux环境上. 本文介绍了OpenCV交叉编译的基本步骤. 在opencv交叉编译之前要先进行依赖库 ...

  4. iTOP-4412开发板qt4文件的移植和修改

    在 7.4 小节介绍配置文件的时候,提到迅为制作的触摸库文件“/usr/local/tslib”,迅为 已经将触摸功能编译到 Qt/E4.7.1 的库文件中,开发板可以支持触摸和鼠标功能. 用户在前面 ...

  5. 学习itop4412开发板有哪些资料可学习?能否学会

    1.光盘资料 下面简单的做一下了解,在需要使用这些资料的时候,会针对性的做详细介绍. 将文件以及文件夹按照“名称+递增”的方式排列,如下: 01_PCB_SCH_DATASHEET-- -----开发 ...

  6. 嵌入式开发 迅为4418开发板Qt移植移动4G模块第一部分

    本文转自迅为论坛:http://topeetboard.com 了解更多:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-7744162139 ...

  7. iTOP-4412开发板-LinuxC-继电器模块的测试例程

    平台:iTOP-4412开发板 实现:继电器模块测试例程 继电器的 C 的测试程序,C 测试程序可以在 Android系统,Qt 系统以及最小 linux 系统上运行,文档以 Android 系统上测 ...

  8. 物联网初学者智能家居必备迅为iTOP-4412开发板

    更情点击了解:http://www.topeetboard.com 1.  手把手全视频教程: 第一部分:迅为电子开发板入门视频 第二部分:Linux系统编程 第三部分:Itop-4412开发板硬件设 ...

  9. iTOP-4412开发板网盘资料介绍

    iTOP-4412开发板网盘视频资料内容如下: 01-烧写.编译以及基础知识视频 02-嵌入式Linux 视频 03-iTOP-4412 开发板硬件设计指导视频 04-Android 应用程序视频 0 ...

随机推荐

  1. Java_String_01_由转义字符串得到其原本字符串

    在开发企业微信电子发票之拉取电子发票接口的时候,微信服务器会发送给我们一个2层的转义字符串,而我们要想得到我们想要的结果,就需要进行一些处理: 反转义+去除首尾双引号. 一.需求 现有一个字符串 st ...

  2. 整数中1出现的次数(从1到n的整数中1出现的次数)

    题目 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.AC ...

  3. Linux学习(二十)软件安装与卸载(三)源码包安装

    一.概述 源码包安装的优点在于它自由程度比较高,可以指定目录与组件.再有,你要是能改源码也可以. 二.安装方法 步骤 1.从官网或者信任站点下载源码包 [root@localhost ~]# wget ...

  4. link和import导入外部样式的区别

    1.结构 link语法结构 <link rel="stylesheet" href="CSSurl" type="text/css" ...

  5. 前端面试题:css相关面试题

    CSS 选择器中,元素选择器和类选择器的区别是什么? 元素选择器是最常见的 CSS 选择器,即,文档的元素就是最基本的选择器.选择器通常是某个 HTML 元素,比如 <p>.<h1& ...

  6. java 之 原型模式(大话设计模式)

    原型模式,在笔者理解看来就是克隆,当我们在创建第一个对象时,已经给对象赋值完毕,此时我们需要一个当前对象的副本,如果没有原型模式,我们会再次创建一个对象,然后后二次赋值,保证两个对象完全一致, 这样我 ...

  7. PHP+Redis 实例【一】点赞 + 热度 下篇

    这篇主要讲如何将数据保存回Mysql,但是里面还会涉及到如何将错误信息以及提示信息保存到文件里,方便以后的运维,再有就是如何使用PHP写进程BAT. Redis数据刷回数据库前的知识准备 首先针对上篇 ...

  8. 十五、Hadoop学习笔记————Zookeeper客户端的使用

    timeout表示会话超时时间,zookeeper靠与客户的心跳来判断会话是否有效(单位毫秒), -r为只读,表示zookeeper如果与半数以上服务器失去连接则会停止服务,如果有-r参数,则会继续保 ...

  9. azure备份虚拟机

    备份 azure虚拟机 提前创建了一个linux虚拟机,位置是chinaeast. 如果我们需要备份的虚拟机分别在中国东部和北部,那么需要在两个位置都创建备份库. 创建库 登录经典门户,新建-> ...

  10. 虚拟机Ubuntu无法上网问题解决过程

    查看了网上大部分经验贴,都没有解决问题,只好自己思考琢磨,以下是思考解决过程 1.查看文件配置 2.查看虚拟机网络配置方式 3.查看硬件驱动是否存在 4.配置完文件ifcfg-eth0后重启,无效(虚 ...