[{"content":"GitHub 镜像访问 1. https://help.kkgithub.com/ 2. https://gitclone.com/ 网站的内容与GitHub完整同步，可进行下载克隆等操作。\nGitHub 文件加速 https://github.akams.cn/ 切换DNS服务器 可以将DNS更换为1.0.0.1或者8.8.4.4\n8.8.4.4解析github.com为20.205.243.166[新加坡 微软云]\n1.0.0.1解析github.com为192.30.255.113\n如果不想修改DNS服务器，也可以设置浏览器DoH加密DNS，具体方法\n相关 DoH 服务器地址，可以通过 https://dns.icoa.cn这个页面找到。\n修改HOST文件 根据https://tool.chinaz.com/dns/github.com获取你所在地区可以PING通的IP进行填写。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #github 20.205.243.166 github.com 20.205.243.166 gist.github.com 20.205.243.166 assets-cdn.github.com 20.205.243.166 raw.githubusercontent.com 20.205.243.166 gist.githubusercontent.com 20.205.243.166 cloud.githubusercontent.com 20.205.243.166 camo.githubusercontent.com 20.205.243.166 avatars0.githubusercontent.com 20.205.243.166 avatars1.githubusercontent.com 20.205.243.166 avatars2.githubusercontent.com 20.205.243.166 avatars3.githubusercontent.com 20.205.243.166 avatars4.githubusercontent.com 20.205.243.166 avatars5.githubusercontent.com 20.205.243.166 avatars6.githubusercontent.com 20.205.243.166 avatars7.githubusercontent.com 20.205.243.166 avatars8.githubusercontent.com # GitHub End 保存，打开cmd 输入ipconfig /flushdns 刷新DNS缓存.\n结束语 以上方案为均来自网络，结合操作实验整理而成，后两种方法即使正常使用后，github.com也有可能间隙性无法访问，每天一般上午正常，午后无法稳定访问，可能是服务器带宽有限或者防火墙原因。\n","permalink":"https://qu.js.cn/accelerated-github/","summary":"\u003ch2 id=\"github-镜像访问\"\u003eGitHub 镜像访问\u003c/h2\u003e\n\u003ch3 id=\"1-httpshelpkkgithubcom\"\u003e1. \u003ca href=\"https://help.kkgithub.com/\"\u003ehttps://help.kkgithub.com/\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"2-httpsgitclonecom\"\u003e2. \u003ca href=\"https://gitclone.com/\"\u003ehttps://gitclone.com/\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003e网站的内容与GitHub完整同步，可进行下载克隆等操作。\u003c/p\u003e\n\u003ch2 id=\"github-文件加速\"\u003eGitHub 文件加速\u003c/h2\u003e\n\u003ch3 id=\"httpsgithubakamscn\"\u003e\u003ca href=\"https://github.akams.cn/\"\u003ehttps://github.akams.cn/\u003c/a\u003e\u003c/h3\u003e\n\u003ch2 id=\"切换dns服务器\"\u003e切换DNS服务器\u003c/h2\u003e\n\u003cp\u003e可以将DNS更换为1.0.0.1或者8.8.4.4\u003c/p\u003e\n\u003cp\u003e8.8.4.4解析github.com为20.205.243.166[新加坡 微软云]\u003c/p\u003e","title":"国内加速访问Github"},{"content":"整体款式 手绘纹样 纹样1 纹样2 纹样3 纹样4 结束语 孩子寒假作业，大家非常满意。\n","permalink":"https://qu.js.cn/china-pattern/","summary":"\u003ch2 id=\"整体款式\"\u003e整体款式\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"整体汉服造型\" loading=\"lazy\" src=\"/231/20230128-IMG_8388.jpg\" title=\"整体汉服造型\"\u003e\u003c/p\u003e\n\u003ch2 id=\"手绘纹样\"\u003e手绘纹样\u003c/h2\u003e\n\u003ch3 id=\"纹样1\"\u003e纹样1\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"纹样1\" loading=\"lazy\" src=\"/231/20230131-IMG_8425.jpg\" title=\"纹样1\"\u003e\u003c/p\u003e\n\u003ch3 id=\"纹样2\"\u003e纹样2\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"纹样2\" loading=\"lazy\" src=\"/231/20230131-IMG_8434.jpg\" title=\"纹样2\"\u003e\u003c/p\u003e\n\u003ch3 id=\"纹样3\"\u003e纹样3\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"纹样3\" loading=\"lazy\" src=\"/231/20230131-IMG_8438.jpg\" title=\"纹样3\"\u003e\u003c/p\u003e\n\u003ch3 id=\"纹样4\"\u003e纹样4\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"纹样4\" loading=\"lazy\" src=\"/231/20230127-IMG_8373.jpg\" title=\"纹样4\"\u003e\u003c/p\u003e\n\u003ch2 id=\"结束语\"\u003e结束语\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e孩子寒假作业，大家非常满意。\u003c/p\u003e\n\u003c/blockquote\u003e","title":"寒假作业中国纹样"},{"content":"2023首画 结束语 孩子新年画作，后台软件更新，上传测试。\n","permalink":"https://qu.js.cn/2023yzart/","summary":"\u003ch2 id=\"2023首画\"\u003e2023首画\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"2023首画\" loading=\"lazy\" src=\"/231/20230115170614.jpg\" title=\"2023开年画作训练\"\u003e\u003c/p\u003e\n\u003ch2 id=\"结束语\"\u003e结束语\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e孩子新年画作，后台软件更新，上传测试。\u003c/p\u003e\n\u003c/blockquote\u003e","title":"2023年假期画作训练"},{"content":"未来世界畅想 结束语 孩子学校邀稿，上传方便传阅。\n","permalink":"https://qu.js.cn/auqanox/","summary":"\u003ch2 id=\"未来世界畅想\"\u003e未来世界畅想\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"未来水世界\" loading=\"lazy\" src=\"/221/20220923-IMG_8043.jpg\" title=\"AuqaNox\"\u003e\u003c/p\u003e\n\u003ch2 id=\"结束语\"\u003e结束语\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e孩子学校邀稿，上传方便传阅。\u003c/p\u003e\n\u003c/blockquote\u003e","title":"未来世界畅想-“AuqaNox”"},{"content":"使用手机NFC克隆简单的加密门禁卡，以前就做过，但过段时间就忘记了，适逢换手机又要重新做一次，所以就有了这篇文章。\n准备工具 硬件：pn532、USB转串口(我采用pn532与ch340一体式读写器)，原门禁卡，空白CUID卡，NFC手机\n软件：MifareOneTool\n基本原理 由于门禁卡中的UID即扇区0无法与后面扇区一同直接写入手机NFC生成的模拟卡中，所以只能分成两次写入。\n首先通过一张实体卡传递扇区0，生成手机中的模拟卡，然后再对模拟卡写入后面的扇区数据。\n制作过程 一、解析原门禁卡信息 启动MifareOneTool\n1. 点击检测连接 若无法检测到串口，也可以手动生成libnfc.conf文件，文件内容如下：\n1 2 3 4 allow_autoscan = true allow_intrusive_scan = false device.name = \u0026#34;NFC-Device\u0026#34; device.connstring = \u0026#34;pn532_uart:COM15:115200\u0026#34; COM15可替换成本机对应的串口。\n2. 点击扫描卡片 放置原门禁卡，进行扫描卡片。\n3. 一键解原卡并保存 解码完成后保存为mfd文件。\n二、复制扇区0保存为空白实体卡 1. HEX编辑器打开原门禁卡文件 高级操作模式 -\u0026gt; Hex编辑器 -\u0026gt; 文件 -\u0026gt; 打开 -\u0026gt; 选择原门禁卡mfd文件\n2. 选择扇区0，复制信息 3. 编辑器新建文件，扇区0填写刚复制的原卡扇区0 回车确认修改，另存为拥有原UID信息的空白卡mfd文件。\n保存后退出HEX编辑器\n4. 将原UID空白卡内容写入实体卡 新卡直接点击写C/FUID卡，选择打开原UID空白卡mfd文件，写入实体卡。\n若是旧卡则一键解原卡后保存为临时.dump，然后点击写C/FUID卡，选择打开原UID空白卡mfd文件，最后写入实体卡。\n点击扫描卡片可检查新旧卡的UID是否一致。\n三、NFC手机模拟空白实体卡 小米手机中启动钱包APP，进入门卡.钥匙，选择添加实体门卡，如下图流程进行\n最后将先前的原UID空白实体卡靠近手机NFC读写区，即可完成拥有原UID信息单元卡的生成。\n四、将原门禁卡mfd写入手机中的模拟门禁卡 将NFC手机中的单元卡弹出，靠近NFC读卡器，点击写C/FUID卡，选择打开原门禁卡mfd文件，写入手机中的单元卡（写入63块即可）。\n结束语 本文只涉及0扇区uid模拟，仅供个人学习，方便日常生活。\n","permalink":"https://qu.js.cn/use_xiaomi_mobile_nfc_to_clone_the_access_card/","summary":"\u003cp\u003e使用手机NFC克隆简单的加密门禁卡，以前就做过，但过段时间就忘记了，适逢换手机又要重新做一次，所以就有了这篇文章。\u003c/p\u003e\n\u003ch2 id=\"准备工具\"\u003e准备工具\u003c/h2\u003e\n\u003cp\u003e硬件：pn532、USB转串口(我采用pn532与ch340一体式读写器)，原门禁卡，空白CUID卡，NFC手机\u003c/p\u003e","title":"小米手机NFC克隆加密门禁卡"},{"content":"前言 硬件开发板：\nSTM32F429\n软件链接：\n编译调试工具 Mbed Studio\n参考 Mbed RTC Api\n根据Mbed RTC Api获得的时间戳只能精确到秒，并且在中断中无法使用time(NULL)，无法满足实际需要，故设法直接使用Hal库获得毫秒级时间戳，并总结记录此文。\n加载相关Hal库 #include \u0026ldquo;stm32f4xx_hal.h\u0026rdquo; mbed-os\\targets\\TARGET_STM\\TARGET_STM32F4\\STM32Cube_FW\\STM32F4xx_HAL_Driver目录下，主要使用HAL_RTC_GetDate与HAL_RTC_GetTime两个函数。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 /** * @brief Gets RTC current date. * @param hrtc pointer to a RTC_HandleTypeDef structure that contains * the configuration information for RTC. * @param sDate Pointer to Date structure * @param Format Specifies the format of the entered parameters. * This parameter can be one of the following values: * @arg RTC_FORMAT_BIN: Binary data format * @arg RTC_FORMAT_BCD: BCD data format * @note You must call HAL_RTC_GetDate() after HAL_RTC_GetTime() to unlock the values * in the higher-order calendar shadow registers to ensure consistency between the time and date values. * Reading RTC current time locks the values in calendar shadow registers until Current date is read. * @retval HAL status */ HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); /** * @brief Gets RTC current time. * @param hrtc pointer to a RTC_HandleTypeDef structure that contains * the configuration information for RTC. * @param sTime Pointer to Time structure * @param Format Specifies the format of the entered parameters. * This parameter can be one of the following values: * @arg RTC_FORMAT_BIN: Binary data format * @arg RTC_FORMAT_BCD: BCD data format * @note You can use SubSeconds and SecondFraction (sTime structure fields returned) to convert SubSeconds * value in second fraction ratio with time unit following generic formula: * Second fraction ratio * time_unit= [(SecondFraction-SubSeconds)/(SecondFraction+1)] * time_unit * This conversion can be performed only if no shift operation is pending (ie. SHFP=0) when PREDIV_S \u0026gt;= SS * @note You must call HAL_RTC_GetDate() after HAL_RTC_GetTime() to unlock the values * in the higher-order calendar shadow registers to ensure consistency between the time and date values. * Reading RTC current time locks the values in calendar shadow registers until current date is read. * @retval HAL status */ HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); 调用顺序应该是先调用HAL_RTC_GetTime，再调用HAL_RTC_GetDate，否则不能解锁，会被锁死。\n#include \u0026ldquo;rtc_api_hal.h\u0026rdquo; mbed-os\\targets\\TARGET_STM目录下，主要是获取PREDIV_S_VALUE相关定义。\n1 2 3 4 5 6 7 /* PREDIV_A : 7-bit asynchronous prescaler */ /* PREDIV_A is set to the maximum value to improve the consumption */ #define PREDIV_A_VALUE 127 /* PREDIV_S : 15-bit synchronous prescaler */ /* PREDIV_S is set in order to get a 1 Hz clock */ #define PREDIV_S_VALUE (RTC_CLOCK / (PREDIV_A_VALUE + 1) - 1) Mbed 默认PREDIV_A_VALUE为3,PREDIV_S_VALUE为8191，RTC_PRER_PREDIV_S为32767\n若调整同步/异步预分频值，需要重新初始化。\n1 2 3 4 5 6 7 8 9 PREDIV_A_VALUE = 0x1F; //31 PREDIV_S_VALUE = 0x3FF; //1023 RtcHandle.Instance = RTC; RtcHandle.Init.HourFormat = RTC_HOURFORMAT_24; RtcHandle.Init.AsynchPrediv = PREDIV_A_VALUE; //默认RtcHandle.Init.AsynchPrediv = RTC_AUTO_1_SECOND; RtcHandle.Init.SynchPrediv = PREDIV_S_VALUE; if (HAL_RTC_Init(\u0026amp;RtcHandle) != HAL_OK) { error(\u0026#34;RTC initialization failed\\n\u0026#34;); } 获得秒级时间戳 1 2 3 4 5 6 7 8 9 10 11 uint32_t get_timestamp() { uint32_t Result; if (HAL_OK == HAL_RTC_GetTime(\u0026amp;hRTC, \u0026amp;RTC_Time, RTC_FORMAT_BIN) \u0026amp;\u0026amp; HAL_OK == HAL_RTC_GetDate(\u0026amp;hRTC, \u0026amp;RTC_Date, RTC_FORMAT_BIN)) { uint16_t Year = RTC_Date.Year + 1900 + 68; //使Year获得值为当前年份 Result = (Year - 1970) * 365 * 24 * 3600 +(monDays[RTC_Date.Month - 1] + RTC_Date.Date) * 24 * 3600 +(RTC_Time.Hours) * 3600 + RTC_Time.Minutes * 60 + RTC_Time.Seconds; Result += (RTC_Date.Month \u0026gt; 2 \u0026amp;\u0026amp; (Year % 4 == 0) \u0026amp;\u0026amp;(Year % 100 != 0 || Year % 400 == 0)) *24 * 3600; //闰月 Year -= 1970; Result += (Year / 4 - Year / 100 + Year / 400) * 24 * 3600; //闰年 } return Result; } 获得毫秒级时间戳 亚秒转化为毫秒 (PREDIV_S_VALUE - 亚秒) * 999 / PREDIV_S_VALUE，返回 0 ~ 999。\n1 2 3 4 5 6 7 8 9 10 11 12 uint64_t get_timestamp_ms() { uint64_t Result; if (HAL_OK == HAL_RTC_GetTime(\u0026amp;hRTC, \u0026amp;RTC_Time, RTC_FORMAT_BIN) \u0026amp;\u0026amp; HAL_OK == HAL_RTC_GetDate(\u0026amp;hRTC, \u0026amp;RTC_Date, RTC_FORMAT_BIN)) { uint16_t Year = RTC_Date.Year + 1900 + 68; //使Year获得值为当前年份 Result = (Year - 1970) * 365 * 24 * 3600 +(monDays[RTC_Date.Month - 1] + RTC_Date.Date) * 24 * 3600 +(RTC_Time.Hours) * 3600 + RTC_Time.Minutes * 60 + RTC_Time.Seconds; Result += (RTC_Date.Month \u0026gt; 2 \u0026amp;\u0026amp; (Year % 4 == 0) \u0026amp;\u0026amp;(Year % 100 != 0 || Year % 400 == 0)) *24 * 3600; //闰月 Year -= 1970; Result += (Year / 4 - Year / 100 + Year / 400) * 24 * 3600; //闰年 Result = Result * 1000 + uint64_t((PREDIV_S_VALUE - RTC_Time.SubSeconds) * 999 / PREDIV_S_VALUE); } return Result; } RTC时间戳扩展 mbed-os\\targets\\TARGET_STM\\TARGET_STM32F4\\STM32Cube_FW\\STM32F4xx_HAL_Driver目录下stm32f4xx_hal_rtc_ex.h\nRTC的时间戳，通过PC13引脚的上升沿或者下降沿可以触发时间戳的中断函数。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /** * @brief Sets TimeStamp with Interrupt. * @param hrtc pointer to a RTC_HandleTypeDef structure that contains * the configuration information for RTC. * @note This API must be called before enabling the TimeStamp feature. * @param TimeStampEdge Specifies the pin edge on which the TimeStamp is * activated. * This parameter can be one of the following values: * @arg RTC_TIMESTAMPEDGE_RISING: the Time stamp event occurs on the * rising edge of the related pin. * @arg RTC_TIMESTAMPEDGE_FALLING: the Time stamp event occurs on the * falling edge of the related pin. * @param RTC_TimeStampPin Specifies the RTC TimeStamp Pin. * This parameter can be one of the following values: * @arg RTC_TIMESTAMPPIN_DEFAULT: PC13 is selected as RTC TimeStamp Pin. * @arg RTC_TIMESTAMPPIN_PI8: PI8 is selected as RTC TimeStamp Pin. (not applicable in the case of STM32F446xx, STM32F412xx, STM32F413xx and STM32F423xx devices) * @arg RTC_TIMESTAMPPIN_PA0: PA0 is selected as RTC TimeStamp Pin only for STM32F446xx devices * @retval HAL status */ HAL_StatusTypeDef HAL_RTCEx_SetTimeStamp_IT(RTC_HandleTypeDef *hrtc, uint32_t TimeStampEdge, uint32_t RTC_TimeStampPin); /** * @brief This function handles TimeStamp interrupt request. * @param hrtc pointer to a RTC_HandleTypeDef structure that contains * the configuration information for RTC. * @retval None */ void HAL_RTCEx_TamperTimeStampIRQHandler(RTC_HandleTypeDef *hrtc); 结束语 因为硬件引脚触发中断获得时间戳的通用性不强，所以通常还是使用计算获得RTC时间戳。\n","permalink":"https://qu.js.cn/mbed_hal_rtc_get_timestamp_ms_13bit/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e硬件开发板：\u003c/p\u003e\n\u003cp\u003eSTM32F429\u003c/p\u003e\n\u003cp\u003e软件链接：\u003c/p\u003e\n\u003cp\u003e编译调试工具 \u003ca href=\"https://os.mbed.com/studio\"\u003eMbed Studio\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e参考 \u003ca href=\"https://os.mbed.com/docs/mbed-os/v6.9/apis/time-apis.html\"\u003eMbed RTC Api\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e根据Mbed RTC Api获得的时间戳只能精确到秒，并且在中断中无法使用time(NULL)，无法满足实际需要，故设法直接使用Hal库获得毫秒级时间戳，并总结记录此文。\u003c/p\u003e","title":"Mbed使用Hal库获得毫秒级时间戳"},{"content":"前言 硬件开发板：\n米尔科技 MYD-YA157C\n软件链接：\n源码及工具 http://down.myir-tech.com/MYD-YA157C/\n参考 MYD-YA157C-V2 Linux 系统开发指南 V2.0\n更新时间 2020-10-10\n本文着重讲述单独编译内核及更新内核部分。\n获取 kernel 源代码 下载 http://down.myir-tech.com/MYD-YA157C/04_Sources.zip\n拷贝解压 04-Source/MYiR-STM32-kernel.tar.bz2 到指定自定义的 work 目录（如/home/work）；\n解压进入源码目录并查看对应的文件信息，如拷贝到 work 目录。\n1 2 3 PC$ cd /home/work PC$ tar -jxvf MYiR-STM32-kernel.tar.bz2 PC$ cd MYiR-STM32-kernel 目录包含：\n源代码目录：stm32mp15xc-kernel\n指导说明：README. HOW_TO.txt\n编译过程使用命令在README. HOW_TO.txt中都可以查看。\n配置内核 进入内核目录 1 PC$ cd stm32mp15xc-kernel 创建输出文件夹 build 1 PC$ mkdir -p ../build 内核配置 1 PC$ make ARCH=arm O=\u0026#34;$PWD/../build\u0026#34; myc-ya157c_defconfig 如需配置内核或者想打开内核某一个驱动功能也可使用如下方式。\n1 2 PC$ cd build PC$ make menuconfig 编译内核 加载 SDK 环境变量 1 2 PC$ source /opt/st/myir/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfp v4-ostl-linux-gnueabi 内核配置 1 PC$ make ARCH=arm O=\u0026#34;$PWD/../build\u0026#34; myc-ya157c_defconfig 编译内核 1 2 PC$ make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040 O=\u0026#34;$PWD/.. /build\u0026#34; PC$ make ARCH=arm modules O=\u0026#34;$PWD/../build\u0026#34; 耐心等待编译完成。\n生成输出文件 1 2 3 4 PC$ make ARCH=arm INSTALL_MOD_PATH=\u0026#34;$PWD/../build/install_artifact\u0026#34; modules_install O=\u0026#34;$PWD/../build\u0026#34; PC$ mkdir -p $PWD/../build/install_artifact/boot/ PC$ cp $PWD/../build/arch/arm/boot/uImage $PWD/../build/install_artifact/boot/ PC$ cp $PWD/../build/arch/arm/boot/dts/st*.dtb $PWD/../build/install_artifact/boot/ build/install_artifact 看到编译输出文件；\nbuild/install_artifact/lib 目录存放的是内核模块文件；\nbuild/install_artifact/boot 目录存放的是设备树与内核镜像文件。\n修改设备树 用户可以在 BSP 源码里创建自己的设备树，一般情况下不需要修改 Bootloader 部分中的 TF-a 和 u-boot。\n用户只需要根据实际的硬件资源对 Linux 内核设备树进行适当的调整即可。\nMYD-YA157C-V2 设备树列表 项目 设备树 说明 Tf-a stm32mp15xx-ya157c.dtsi 资源设备树 stm32mp157c-ya157c-512d-v2.dts 支持 V2 核心板设备描述 stm32mp15-ddr3-2x2Gb-1066-binG.dtsi 双片 256MB DDR3 描述 U-boot stm32mp15xx-ya157c.dtsi 资源设备树 stm32mp157c-ya157c-512d-v2.dts\nstm32mp157c-ya157c-512d-v2-u-boot.dtsi 支持 V2 核心板设备描述 stm32mp15-ddr3-2x2Gb-1066-binG.dtsi 双片 256MB DDR3 描述 stm32mp157-pinctrl.dtsi stm32mp157 系列处理器的 pin 脚定义 Kernel myc-ya157c_defconfig 内核配置文件 stm32mp15xx-ya157c.dtsi 资源设备树 stm32mp157c-ya157c-v2.dts 无显示的设备树 stm32mp157c-ya157c-hdmi-v2.dts 支持 HDMI 显示的设备树 stm32mp157c-ya157c-lcd-v2.dts 支持 lcd 显示的设备树 stm32mp157-ya157c-pinctrl.dtsi MYD-YA57C-V2 开发板 pin 脚定义 在内核源码下 arch/arm/boot/dts 下可以看到大量的平台设备树。\n修改stm32mp15xx-ya157c.dtsi\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) /* * Copyright (C) STMicroelectronics 2019 - All Rights Reserved * Author: Alexandre Torgue \u0026lt;alexandre.torgue@st.com\u0026gt; for STMicroelectronics. */ #include \u0026#34;stm32mp157-m4-srm.dtsi\u0026#34; #include \u0026#34;stm32mp157-m4-srm-pinctrl.dtsi\u0026#34; #include \u0026lt;dt-bindings/mfd/st,stpmic1.h\u0026gt; #include \u0026lt;dt-bindings/input/input.h\u0026gt; / { memory@c0000000 { device_type = \u0026#34;memory\u0026#34;; reg = \u0026lt;0xc0000000 0x20000000\u0026gt;; }; reserved-memory { #address-cells = \u0026lt;1\u0026gt;; #size-cells = \u0026lt;1\u0026gt;; ranges; mcuram2: mcuram2@10000000 { compatible = \u0026#34;shared-dma-pool\u0026#34;; reg = \u0026lt;0x10000000 0x40000\u0026gt;; no-map; }; vdev0vring0: vdev0vring0@10040000 { compatible = \u0026#34;shared-dma-pool\u0026#34;; reg = \u0026lt;0x10040000 0x1000\u0026gt;; no-map; }; vdev0vring1: vdev0vring1@10041000 { compatible = \u0026#34;shared-dma-pool\u0026#34;; reg = \u0026lt;0x10041000 0x1000\u0026gt;; no-map; }; vdev0buffer: vdev0buffer@10042000 { compatible = \u0026#34;shared-dma-pool\u0026#34;; reg = \u0026lt;0x10042000 0x4000\u0026gt;; no-map; }; mcuram: mcuram@30000000 { compatible = \u0026#34;shared-dma-pool\u0026#34;; reg = \u0026lt;0x30000000 0x40000\u0026gt;; no-map; }; retram: retram@38000000 { compatible = \u0026#34;shared-dma-pool\u0026#34;; reg = \u0026lt;0x38000000 0x10000\u0026gt;; no-map; }; }; /* 屏蔽有些功能，释放GPIO脚 joystick { compatible = \u0026#34;gpio-keys\u0026#34;; #size-cells = \u0026lt;0\u0026gt;; button-0 { label = \u0026#34;usr_button\u0026#34;; linux,code = \u0026lt;KEY_ENTER\u0026gt;; interrupt-parent = \u0026lt;\u0026amp;gpioi\u0026gt;; interrupts = \u0026lt;11 IRQ_TYPE_EDGE_RISING\u0026gt;; }; }; led { compatible = \u0026#34;gpio-leds\u0026#34;; blue { label = \u0026#34;heartbeat\u0026#34;; gpios = \u0026lt;\u0026amp;gpioa 14 GPIO_ACTIVE_HIGH\u0026gt;; linux,default-trigger = \u0026#34;heartbeat\u0026#34;; default-state = \u0026#34;off\u0026#34;; }; red { label = \u0026#34;red\u0026#34;; gpios = \u0026lt;\u0026amp;gpioa 13 GPIO_ACTIVE_HIGH\u0026gt;; linux,default-trigger = \u0026#34;none\u0026#34;; status = \u0026#34;okay\u0026#34;; }; }; */ wifi_pwrseq: wifi-pwrseq { compatible = \u0026#34;mmc-pwrseq-simple\u0026#34;; reset-gpios = \u0026lt;\u0026amp;gpiof 3 GPIO_ACTIVE_LOW\u0026gt;; }; /*\tpanel_backlight: panel-backlight { compatible = \u0026#34;gpio-backlight\u0026#34;; gpios = \u0026lt;\u0026amp;gpiob 8 GPIO_ACTIVE_HIGH\u0026gt;; default-on;\tstatus = \u0026#34;okay\u0026#34;; }; panel_backlight: panel-backlight { compatible = \u0026#34;pwm-backlight\u0026#34;; pwms = \u0026lt;\u0026amp;pwm4 0 5000000\u0026gt;; brightness-levels = \u0026lt;0 4 8 16 32 64 128 255\u0026gt;; default-brightness-level = \u0026lt;6\u0026gt;; status = \u0026#34;okay\u0026#34;; }; */ usb_phy_tuning: usb-phy-tuning { st,hs-dc-level = \u0026lt;2\u0026gt;; st,fs-rftime-tuning; st,hs-rftime-reduction; st,hs-current-trim = \u0026lt;15\u0026gt;; st,hs-impedance-trim = \u0026lt;1\u0026gt;; st,squelch-level = \u0026lt;3\u0026gt;; st,hs-rx-offset = \u0026lt;2\u0026gt;; st,no-lsfs-sc; }; vin: vin { compatible = \u0026#34;regulator-fixed\u0026#34;; regulator-name = \u0026#34;vin\u0026#34;; regulator-min-microvolt = \u0026lt;5000000\u0026gt;; regulator-max-microvolt = \u0026lt;5000000\u0026gt;; regulator-always-on; }; vdd_usb: fixedregulator@3 { compatible = \u0026#34;regulator-fixed\u0026#34;; regulator-name = \u0026#34;vdd_usb\u0026#34;; regulator-min-microvolt = \u0026lt;3300000\u0026gt;; regulator-max-microvolt = \u0026lt;3300000\u0026gt;; startup-delay-us = \u0026lt;70000\u0026gt;; regulator-boot-on; regulator-pull-down; }; vddref: fixedregulator@2 { compatible = \u0026#34;regulator-fixed\u0026#34;; regulator-name = \u0026#34;vddref\u0026#34;; regulator-min-microvolt = \u0026lt;3300000\u0026gt;; regulator-max-microvolt = \u0026lt;3300000\u0026gt;; startup-delay-us = \u0026lt;70000\u0026gt;; enable-active-high; }; }; ...... 修改后编译设备树\n1 2 PC$ make ARCH=arm dtbs LOADADDR=0xC2000040 O=\u0026#34;$PWD/.. /build\u0026#34; PC$ cp $PWD/../build/arch/arm/boot/dts/st*.dtb $PWD/../build/install_artifact/boot/ 网络更新内核 在生成输出文件下 build/install_artifact/ 使用 scp 方式传输需要更新的文件。\n挂载 boot 目录 若 stm32mp157c使用 ubuntu 文件系统下，需要先挂载 boot 目录。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 root@stm32mp1: fdisk -lu ...... Device Start End Sectors Size Type /dev/mmcblk2p1 34 4129 4096 2M Microsoft basic data /dev/mmcblk2p2 4130 135201 131072 64M Linux filesystem /dev/mmcblk2p3 135202 167969 32768 16M Linux filesystem /dev/mmcblk2p4 167970 6926369 6758400 3.2G Linux filesystem /dev/mmcblk2p5 6926370 7335969 409600 200M Linux filesystem root@stm32mp1:~# mount /dev/mmcblk2p2 /boot root@stm32mp1:~# cd /boot root@stm32mp1:/boot# ls boot.scr.uimg splash.bmp uImage lost+found stm32mp157c-ya157c-hdmi-v2.dtb uInitrd mmc0_extlinux stm32mp157c-ya157c-lcd-v2.dtb mmc1_extlinux stm32mp157c-ya157c-v2.dtb 更新 uImage 与设备树 1 PC$ scp -r boot/* root@192.168.31.80:/boot/ 更新内核 modules 删除编译生成文件 build/install_artifact/lib 下的软连接文件\n1 2 PC$ rm lib/modules/\u0026lt;kernel version\u0026gt;/source lib/modules/\u0026lt;kernel version\u0026gt;/build PC$ scp -r lib/modules/* root@192.168.31.80:/lib/modules/ 结束语 STM32MP157C更新内核，也可以直接拷贝至bootfs.ext4分区文件中，方便制作TF卡引导或者TF卡批量刷机。\n","permalink":"https://qu.js.cn/complie_kernel_and_update_stm32mp157c/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e硬件开发板：\u003c/p\u003e\n\u003cp\u003e米尔科技 MYD-YA157C\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"MYD-YA157C\" loading=\"lazy\" src=\"/211/myd_ya157c.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e软件链接：\u003c/p\u003e\n\u003cp\u003e源码及工具 \u003ca href=\"http://down.myir-tech.com/MYD-YA157C/\"\u003ehttp://down.myir-tech.com/MYD-YA157C/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e参考 MYD-YA157C-V2 Linux 系统开发指南 V2.0\u003c/p\u003e\n\u003cp\u003e更新时间 2020-10-10\u003c/p\u003e\n\u003cp\u003e本文着重讲述单独编译内核及更新内核部分。\u003c/p\u003e\n\u003ch2 id=\"获取-kernel-源代码\"\u003e获取 kernel 源代码\u003c/h2\u003e\n\u003cp\u003e下载 \u003ca href=\"http://down.myir-tech.com/MYD-YA157C/04_Sources.zip\"\u003ehttp://down.myir-tech.com/MYD-YA157C/04_Sources.zip\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e拷贝解压 04-Source/MYiR-STM32-kernel.tar.bz2 到指定自定义的 work 目录（如/home/work）；\u003c/p\u003e","title":"编译stm32mp157c内核并更新"},{"content":"前言 在使用Ubuntu18.04的过程中，经常会遇到域名无法解析的问题。\n在要设置dns时，如果简单地修改/etc/resolv.conf，那么一旦重启，就恢复默认值了。\n安装配置resolvconf后可一般解决DNS问题。\n安装配置 临时修改/etc/resolv.conf，添加或者修改nameserver 114.114.114.114，使网络可以正常使用。\n安装resolvconf 1 sudo apt install resolvconf 添加DNS服务器 /etc/resolvconf/resolv.conf.d/ 目录下head文件是在/etc/resolv.conf开头添加DNS服务器记录，tail文件是在/etc/resolv.conf结尾添加DNS服务器记录。\n1 sudo vim /etc/resolvconf/resolv.conf.d/head 增加一行 nameserver 114.114.114.114，并且一定要回车换行。\n系统重启后查看 1 2 3 4 cat /etc/resolv.conf nameserver 114.114.114.114 nameserver 127.0.0.53 由于127.0.0.53已经不需要使用了，所以我们进行下一步。\n禁用systemd-resolved 1 2 sudo systemctl disable systemd-resolved.service sudo systemctl stop systemd-resolved 系统重启后查看\n1 2 3 cat /etc/resolv.conf nameserver 114.114.114.114 结束语 由于在开发板中使用ubuntu，systemd-resolved并不是必须的，所以完全可以禁用并停止使用。\n","permalink":"https://qu.js.cn/ubuntu18_config_dns_server/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e在使用Ubuntu18.04的过程中，经常会遇到域名无法解析的问题。\u003c/p\u003e\n\u003cp\u003e在要设置dns时，如果简单地修改/etc/resolv.conf，那么一旦重启，就恢复默认值了。\u003c/p\u003e","title":"Ubuntu配置DNS解决域名无法解析"},{"content":"TIM版一直有这个BUG，并且这个问题已经很久了。如果电脑上之前没有安装过QQ完整版，那么TIM版里面，设置修改个人文件夹位置将无法生效。\nQQ轻聊版也有这个问题，但由于我不使用，所以也不关心。\n网上调研了一下，大概有两个方法。\n添加UserDataInfo.ini 打开TIM设置界面，找到个人文件夹设置的地方，点击“打开个人文件夹”，打开当前的个人文件夹后，退出TIM。\n在个人文件夹中进入上一层目录，把里面的QQ号码文件夹和All Users文件夹移动或复制到自定义的个人文件夹位置，比如E:\\MSG目录下。\n进入\u0026quot;C:\\Users\\Public\\Documents\\Tencent\\QQ\u0026quot;目录（若没有这个目录，可自行创建），在该目录下右键新建文本文件，并重命名为“UserDataInfo.ini”。\n双击打开“UserDataInfo.ini”文件，将下列内容复制粘贴进去，UserDataSavePath=E:\\MSG 就是自定义的个人文件夹位置，保存并关闭。\n1 2 3 4 5 6 7 8 9 10 [UserDataImportSet] NeedImport=0 OldVersion= OldVerDataPathType= OldVerDataPath= OldQQInstallPath=C:\\Program Files (x86)\\Tencent\\QQ [UserDataSet] UserDataSavePathType=2 UserDataSavePath=E:\\MSG NewVersion=57.97.0.27712.0 重新启动TIM，打开配置界面，查看修改是否生效。 安装QQ完整版 首先安装QQ完整版，在安装时选择自定义文件夹位置；然后再安装TIM版。\n结束语 两个方法实际是殊途同归，最终是生成UserDataInfo.ini文件，从而修改自定义个人文件夹位置，QQ轻聊版应该如上一样修改。\n","permalink":"https://qu.js.cn/how_modify_custom_directory_by_tim/","summary":"\u003cp\u003eTIM版一直有这个BUG，并且这个问题已经很久了。如果电脑上之前没有安装过QQ完整版，那么TIM版里面，设置修改个人文件夹位置将无法生效。\u003c/p\u003e\n\u003cp\u003eQQ轻聊版也有这个问题，但由于我不使用，所以也不关心。\u003c/p\u003e","title":"TIM如何修改个人文件夹位置"},{"content":"官网下载安装包安装 下载 code.visualstudio.com\nubuntu系统内下载缓慢时，可借用windows迅雷加速下载。\n安装 1 sudo dpkg -i code_1.52.1-1608136922_amd64.deb 使用umake安装 简单介绍 Ubuntu Make 原名 Ubuntu Developer Tools Center，是一款开源的命令行工具软件，用户可在主要 Linux 平台上轻易的进行安装，以开发 Android 应用。\n随着不断发展，Ubuntu Make 现在已经包含很多的ide和软件开发工具。\n安装umake命令 Ubuntu 用户安装命令：\n1 2 3 sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make sudo apt-get update sudo apt-get install -y ubuntu-make 卸载 umake 命令：\n1 sudo apt-get remove ubuntu-make 使用说明：\n1 sudo umake --help 提示： 安装 GO 命令：\n1 sudo umake go go-lang 安装Arduino IDE 命令：\n1 sudo umake ide arduino 安装 Android Studio 命令：\n1 sudo umake android android-studio 安装VSCode 安装命令\n1 sudo umake ide visual-studio-code 提示输入a接受，安装完后，提示软件安装路径；\n系统重启，软件市场出现VSCode图标。\n结束语 IDE开发工具选择VSCode，原因非常简单\u0026ndash;跨平台，版本控制、编译测试、部署环境界面统一。\n","permalink":"https://qu.js.cn/ubuntu-install-vscode/","summary":"\u003ch2 id=\"官网下载安装包安装\"\u003e官网下载安装包安装\u003c/h2\u003e\n\u003ch3 id=\"下载\"\u003e下载\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://code.visualstudio.com/download\"\u003ecode.visualstudio.com\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eubuntu系统内下载缓慢时，可借用windows迅雷加速下载。\u003c/p\u003e\n\u003ch3 id=\"安装\"\u003e安装\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo  dpkg  -i code_1.52.1-1608136922_amd64.deb\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"使用umake安装\"\u003e使用umake安装\u003c/h2\u003e\n\u003ch3 id=\"简单介绍\"\u003e简单介绍\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/ubuntu/ubuntu-make\"\u003eUbuntu Make\u003c/a\u003e 原名 Ubuntu Developer Tools Center，是一款开源的命令行工具软件，用户可在主要 Linux 平台上轻易的进行安装，以开发 Android 应用。\u003c/p\u003e","title":"Ubuntu快速安装VSCode"},{"content":"前言 1.Gitea介绍 Gitea可以像Github那样，管理公司的文档与代码类资产。\nGitea采用GO语言编写，是自助式、轻量级、遵循Git规范的代码托管工具。\nGitea官网：https://gitea.io/zh-cn/，Gitea官方文档：https://docs.gitea.io/zh-cn/\n2.Drone介绍 Drone是基于Docker的CI/CD工具。Drone 所有编译、测试的流程都在容器中进行。\n开发者只需在项目中包含 .drone.yml 文件，将代码推送到 git 仓库，Drone就能够自动化的进行编译、测试、发布。\n官网：https://drone.io/，官方文档：https://docs.drone.io/\n3.Drone优势 流程定义简单 配置即为代码，用配置的方式简单明了定义流程，告别复杂的shell脚本。\n支持多硬件环境 Drone适合在各种平台运行，如Linux x64、ARM、ARM64、Windows x64。\n支持多种源代码管理系统 Drone支持各种多种主流的git源代码管理系统如 Github, Bitbucket, GitLab, GitTea。\n支持各种编程语言编程环境 Drone+docker基本可用于任何编程语言、任何数据，任何服务。\n工作原理 git push提交代码（含有.drone.yml）到代码托管系统（GitHub、GitLab、Gitea等）\n代码托管系统通过 webhook 触发Drone的pipeline\n登录Drone平台执行pipeline，build构建项目\n构建Docker镜像（需要 Dockerfile 文件）\n自动将镜像发布至Docker仓库，或者部署工作（需要pipeline插件配置）\n结束语 专注代码，敏捷部署，配置即代码。\ndrone.yml + Dockerfile + docker-compse.yml三个文件自动完成代码编译测试、发布镜像、部署容器的整个开发流程。\n","permalink":"https://qu.js.cn/gitea-drone-cicd/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003ch3 id=\"1gitea介绍\"\u003e1.Gitea介绍\u003c/h3\u003e\n\u003cp\u003eGitea可以像Github那样，管理公司的文档与代码类资产。\u003c/p\u003e\n\u003cp\u003eGitea采用GO语言编写，是自助式、轻量级、遵循Git规范的代码托管工具。\u003c/p\u003e\n\u003cp\u003eGitea官网：\u003ca href=\"https://gitea.io/zh-cn/\"\u003ehttps://gitea.io/zh-cn/\u003c/a\u003e，Gitea官方文档：\u003ca href=\"https://docs.gitea.io/zh-cn/\"\u003ehttps://docs.gitea.io/zh-cn/\u003c/a\u003e\u003c/p\u003e","title":"基于Gitea与Drone的自动集成部署"},{"content":"官方内容 概述 vs-picgo VSCode的PicGo插件。\n插件安装 VSCode扩展中查找picgo，点击安装即可。\nGithub设置 设备仓库名 \u0026lt;用户名\u0026gt;/\u0026lt;仓库名\u0026gt;\n设定分支名 github默认为main\n获取Github token Github / Settings / Developer settings / Personal access tokens\n点击Generate new token，填写Note，把repo的勾打上。\n翻到页面底部，点击Generate token的绿色按钮生成token。\n设定自定义域名 https://cdn.jsdelivr.net/gh/\u0026lt;用户名\u0026gt;/\u0026lt;仓库名\u0026gt;@\u0026lt;分支名\u0026gt;\nhttps://cdn.jsdelivr.net/gh/ 可替换其他CDN域名前缀\n插件使用 从剪贴板上传图片到图床 Windows/Unix: Ctrl + Alt + u\nOsX: Cmd + Opt + u\n从资源管理器上传图片到图床 Windows/Unix: Ctrl + Alt + e\nOsX: Cmd + Opt + e\n从输入框中输入图片名称上传 Windows/Unix: Ctrl + Alt + o\nOsX: Cmd + Opt + 0\n这个快捷键可能与其他软件快捷键冲突。\n结束语 VSCode PicGo插件更新很快，使用非常简便；但上传错误需要修改删除时，需要使用PicGo软件对图床照片进行管理操作。\n","permalink":"https://qu.js.cn/vscode-plugins-vs-picgo/","summary":"\u003ch2 id=\"官方内容\"\u003e官方内容\u003c/h2\u003e\n\u003ch3 id=\"概述\"\u003e概述\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/PicGo/vs-picgo\"\u003evs-picgo\u003c/a\u003e VSCode的PicGo插件。\u003c/p\u003e\n\u003ch3 id=\"插件安装\"\u003e插件安装\u003c/h3\u003e\n\u003cp\u003eVSCode扩展中查找picgo，点击安装即可。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"vc-picgo插件安装\" loading=\"lazy\" src=\"/211/vscode-plugins-vs-picgo-01.jpg\"\u003e\u003c/p\u003e\n\u003ch3 id=\"github设置\"\u003eGithub设置\u003c/h3\u003e\n\u003ch4 id=\"设备仓库名\"\u003e设备仓库名\u003c/h4\u003e\n\u003cp\u003e\u0026lt;用户名\u0026gt;/\u0026lt;仓库名\u0026gt;\u003c/p\u003e\n\u003ch4 id=\"设定分支名\"\u003e设定分支名\u003c/h4\u003e\n\u003cp\u003egithub默认为main\u003c/p\u003e","title":"VSCode的PicGo插件配置"},{"content":"晓瑞的博客 从事IT行业20多年了，没有认真记录些什么。\n技术知识库很杂，很凌乱，\n用时到处搜索与试错，过后归纳总结的不多。\n日子久了，就淡忘了。\n一直想试图改变，但总觉得没有趁手的工具。\n偶然了解HUGO的静态网站解决方案，\nMarkdown写文章也许能更随意，更自由。\n2021年伊始，借助HUGO与对象存储，\n重启技术博客，争取持续记录。\n瑞志谐音睿智\n希望日积月累，丰富自己，达到睿智的境界!\n联系我 GitHub：github.com/quxiaorui\nEmail：quxiaorui@qq.com\n微信：qu_xiaorui\n网站支持 本站是由GITEA版本控制，内置ACTIONS持续集成，HUGO编译生成，托管于腾讯COS。 使用主题 PaperMod 构建。\n许可协议 网站内容根据 CC BY-NC 4.0 许可协议授权。\n","permalink":"https://qu.js.cn/about/","summary":"\u003ch3 id=\"晓瑞的博客\"\u003e晓瑞的博客\u003c/h3\u003e\n\u003cp\u003e从事IT行业20多年了，没有认真记录些什么。\u003c/p\u003e\n\u003cp\u003e技术知识库很杂，很凌乱，\u003c/p\u003e\n\u003cp\u003e用时到处搜索与试错，过后归纳总结的不多。\u003c/p\u003e\n\u003cp\u003e日子久了，就淡忘了。\u003c/p\u003e\n\u003cp\u003e一直想试图改变，但总觉得没有趁手的工具。\u003c/p\u003e","title":"关于我"},{"content":"官方内容 概述 PicGo 一个用于快速上传图片并获取图片 URL 链接的工具。\nPicGo 支持如下图床：\n七牛图床 腾讯云 COS 又拍云 GitHub SM.MS 阿里云 OSS Imgur 下载安装 点击此处下载 应用\n应用截图 更多内容\n应用设置 Github设置 设备仓库名 \u0026lt;用户名\u0026gt;/\u0026lt;仓库名\u0026gt;\n设定分支名 github默认为main\n获取Github token Github / Settings / Developer settings / Personal access tokens\n点击Generate new token，填写Note，把repo的勾打上。\n翻到页面底部，点击Generate token的绿色按钮生成token。\n设定自定义域名 https://cdn.jsdelivr.net/gh/\u0026lt;用户名\u0026gt;/\u0026lt;仓库名\u0026gt;@\u0026lt;分支名\u0026gt;\nhttps://cdn.jsdelivr.net/gh/ 可替换其他CDN域名前缀\n腾讯云COS设置 新建用户 右上角帐户 / 访问管理 / 用户 / 用户列表 / 新建用户\n访问控制选择编程方式，\n用户权限选择QcloudCOSFullAccess，\n其他均不勾选，点击创建用户。\n用户访问信息 查看用户，获取用户信息。\n获取SecretId、SecretKey、APPID\n创建存储桶 控制台 / 对象存储 / 存储桶列表 / 创建存储桶\n获取存储空间名与存储区域\n填写相关设置 填写腾讯云COS设置\n如果使用CDN，可以设定自定义域名\n使用 PicGo上传图片得到图床图片网络链接，有5种链接格式，可配合各种md编辑器使用。\n结束语 如果是国外静态网站，图床推荐使用Github；如果是国内备案网站，可以使用腾讯COS+CDN，流量花费也不是很高。\n","permalink":"https://qu.js.cn/how-to-upload-images-by-picgo/","summary":"\u003ch2 id=\"官方内容\"\u003e官方内容\u003c/h2\u003e\n\u003ch3 id=\"概述\"\u003e概述\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/Molunerfinn/PicGo\"\u003ePicGo\u003c/a\u003e 一个用于快速上传图片并获取图片 URL 链接的工具。\u003c/p\u003e\n\u003cp\u003ePicGo 支持如下图床：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.qiniu.com/products/kodo\"\u003e七牛图床\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cloud.tencent.com/product/cos\"\u003e腾讯云 COS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.upyun.com/products/file-storage\"\u003e又拍云\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/\"\u003eGitHub\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://sm.ms/\"\u003eSM.MS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.aliyun.com/product/oss\"\u003e阿里云 OSS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImgur\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"下载安装\"\u003e下载安装\u003c/h3\u003e\n\u003cp\u003e点击此处下载 \u003ca href=\"https://github.com/Molunerfinn/PicGo/releases\"\u003e应用\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"应用截图\"\u003e应用截图\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"PicGo 截图\" loading=\"lazy\" src=\"https://raw.staticdn.net/Molunerfinn/test/master/picgo/picgo-2.0.gif\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://picgo.github.io/PicGo-Doc\"\u003e更多内容\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"应用设置\"\u003e应用设置\u003c/h2\u003e\n\u003ch3 id=\"github设置\"\u003eGithub设置\u003c/h3\u003e\n\u003ch4 id=\"设备仓库名\"\u003e设备仓库名\u003c/h4\u003e\n\u003cp\u003e\u0026lt;用户名\u0026gt;/\u0026lt;仓库名\u0026gt;\u003c/p\u003e","title":"PicGo图床软件的配置与使用"},{"content":"GitHub 镜像访问 国内最常用的镜像地址：\n1. github.com.cnpmjs.org 2. hub.fastgit.org (推荐) 3. gitclone.com 网站的内容与GitHub完整同步，可进行下载克隆等操作。\n仓库克隆下载 原地址\n1 git clone https://github.com/docker/compose.git 改为\n1 git clone https://github.com.cnpmjs.org/docker/compose.git 或者\n1 git clone https://hub.fastgit.org/docker/compose.git 或者\n1 git clone https://gitclone.com/github.com/docker/compose.git Release下载加速 原地址\n1 wget https://github.com/golang/go/archive/go1.15.7.tar.gz 改为\n1 wget https://hub.fastgit.org/golang/go/archive/go1.15.7.tar.gz 免替换法 1 git config --global url.\u0026#34;https://hub.fastgit.org\u0026#34;.insteadOf https://github.com 直接编辑 ~/.gitconfig 添加： 1 2 [url \u0026#34;https://hub.fastgit.org/\u0026#34;] insteadOf = https://github.com/ 查看git配置信息 1 git config --global --list 取消设置 1 git config --global --unset url.\u0026#34;https://hub.fastgit.org.insteadof\u0026#34; raw文件下载加速 将 raw.githubusercontent.com 替换为 raw.staticdn.net 即可加速。\n原地址\n1 wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/README.md 替换为\n1 wget https://raw.staticdn.net/kubernetes/kubernetes/master/README.md GitHub + Jsdelivr CDN加速(已失效) jsDelivr 是一个免费开源的CDN 解决方案；\n包含 JavaScript 库、jQuery 插件、CSS 框架、字体等常用的静态资源；\njsdelivr 不能获取 exe 文件以及 Release 处附加的 exe 和 dmg 文件。\n1. 直接引用(临时) 格式为：\nhttps://cdn.jsdelivr.net/gh/\u0026lt;用户名\u0026gt;/\u0026lt;仓库名\u0026gt;/\u0026lt;文件及路径\u0026gt;\n例如：GitHub\nhttps://github.com/qimage/pub/blob/main/avatar.webp\n转成 jsdelivr\nhttps://cdn.jsdelivr.net/gh/qimage/pub/avatar.webp\ngithub.com 替换成 cdn.jsdelivr.net/gh\n/blob/main 删除\n2. 引入版本号(推荐) 版本号用@符链接，格式为：\nhttps://cdn.jsdelivr.net/gh/\u0026lt;用户名\u0026gt;/\u0026lt;仓库名\u0026gt;@版本号/\u0026lt;文件及路径\u0026gt;\n例如：GitHub\nhttps://github.com/qimage/pub/blob/main/avatar.webp\n转成 jsdelivr\nhttps://cdn.jsdelivr.net/gh/qimage/pub@main/avatar.webp\ngithub.com 替换成 cdn.jsdelivr.net/gh\n/blob/ 替换成 @\n注：main为创建的版本号\n建议使用发布版本号方案，只要单次版本号下的内容大小不超过50M即可，超过50M时使用多版本号。\n提示： 需要jsDelivr缓存实时刷新，只需将想刷新的链接的开头的\n1 https://cdn.jsdelivr.net/ 替换成\n1 https://purge.jsdelivr.net/ 即可实时刷新，刷新成功后，浏览器会返回缓存刷新成功的信息。\n修改HOSTS文件进行加速 1. 查询相关域名IP地址 通过 ipaddress.com 查询\ngithub.global.ssl.fastly.net\ngithub.com\n2. 修改host文件映射查找到的IP地址 windows系统中修改C:\\Windows\\System32\\drivers\\etc\\hosts文件的权限，指定可写入；\nubuntu系统中修改/etc/hosts文件；\n用编辑器打开hosts文件，在末尾处添加以下内容：\n1 2 199.232.69.194 github.global.ssl.fastly.net 140.82.112.4 github.com 同时也可以查询其他域名地址，解决DNS污染问题。\n可以直接选中以下内容复制粘贴，20210126更新\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 # GitHub Start 140.82.113.3 github.com 140.82.114.20 gist.github.com 151.101.184.133 assets-cdn.github.com 151.101.184.133 raw.githubusercontent.com 199.232.28.133 raw.githubusercontent.com 151.101.184.133 gist.githubusercontent.com 151.101.184.133 cloud.githubusercontent.com 151.101.184.133 camo.githubusercontent.com 199.232.96.133 avatars.githubusercontent.com 151.101.184.133 avatars0.githubusercontent.com 199.232.68.133 avatars0.githubusercontent.com 199.232.28.133 avatars0.githubusercontent.com 199.232.28.133 avatars1.githubusercontent.com 151.101.184.133 avatars1.githubusercontent.com 151.101.108.133 avatars1.githubusercontent.com 151.101.184.133 avatars2.githubusercontent.com 199.232.28.133 avatars2.githubusercontent.com 151.101.184.133 avatars3.githubusercontent.com 199.232.68.133 avatars3.githubusercontent.com 151.101.184.133 avatars4.githubusercontent.com 199.232.68.133 avatars4.githubusercontent.com 151.101.184.133 avatars5.githubusercontent.com 199.232.68.133 avatars5.githubusercontent.com 151.101.184.133 avatars6.githubusercontent.com 199.232.68.133 avatars6.githubusercontent.com 151.101.184.133 avatars7.githubusercontent.com 199.232.68.133 avatars7.githubusercontent.com 151.101.184.133 avatars8.githubusercontent.com 199.232.68.133 avatars8.githubusercontent.com 199.232.96.133 avatars9.githubusercontent.com # GitHub End 3. 本地DNS刷新 windows中若遇到网络异常，可能是DNS缓存的问题，可以命令刷新。\n1 2 3 ipconfig /displaydns # 显示dns缓存 ipconfig /flushdns # 刷新DNS记录 ipconfig /renew # 重请从DHCP服务器获得IP ubuntu中重启网络\n1 sudo /etc/init.d/networking restart 通过 Gitee 导入Github仓库进行中转下载 访问 gitee 并登录，在顶部选择“从 GitHub/GitLab 导入仓库”。\n导入后，若源站更新，Gitee导入仓库需要强制更新同步。\nGitee 极速下载，热门仓库每日同步一次。\nGitHub 文件加速 利用 Cloudflare Workers提供GitHub 文件 , Releases , archive 以及 raw.githubusercontent.com 文件加速下载服务。\n开源项目地址: https://github.com/hunshcn/gh-proxy\n部署独立地址: https://ghproxy.com/\n结束语 以上方案为均来自网络，结合操作实验整理而成。\n","permalink":"https://qu.js.cn/how-to-speed-github/","summary":"\u003ch2 id=\"github-镜像访问\"\u003eGitHub 镜像访问\u003c/h2\u003e\n\u003cp\u003e国内最常用的镜像地址：\u003c/p\u003e\n\u003ch3 id=\"1-githubcomcnpmjsorg\"\u003e1. \u003ca href=\"https://github.com.cnpmjs.org\"\u003egithub.com.cnpmjs.org\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"2-hubfastgitorg-推荐\"\u003e2. \u003ca href=\"https://hub.fastgit.org\"\u003ehub.fastgit.org\u003c/a\u003e (推荐)\u003c/h3\u003e\n\u003ch3 id=\"3-gitclonecom\"\u003e3. \u003ca href=\"https://gitclone.com\"\u003egitclone.com\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003e网站的内容与GitHub完整同步，可进行下载克隆等操作。\u003c/p\u003e\n\u003ch4 id=\"仓库克隆下载\"\u003e仓库克隆下载\u003c/h4\u003e\n\u003cp\u003e原地址\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-Shell\" data-lang=\"Shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/docker/compose.git\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e改为\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-Shell\" data-lang=\"Shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com.cnpmjs.org/docker/compose.git\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e或者\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-Shell\" data-lang=\"Shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://hub.fastgit.org/docker/compose.git\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e或者\u003c/p\u003e","title":"国内加速Github的几种方案"},{"content":"官方安装 1 curl -L \u0026#34;https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)\u0026#34; -o /usr/local/bin/docker-compose 国内安装(x86) 参考daocloud的https://get.daocloud.io/#install-compose\n1 2 curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` \u0026gt; /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 嵌入式系统安装(ARM64) 1 apt-get install -y python python-pip libffi-dev //如果不安装libffi-dev，在安装docker-compose的时候会报错，提示找不到ffi.h文件\n1 pip install docker-compose //用pip安装docker-compose 版本验证 1 docker-compose --version ","permalink":"https://qu.js.cn/ubuntu18-install-docker-compose/","summary":"\u003ch2 id=\"官方安装\"\u003e官方安装\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -L \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/docker/compose/releases/download/1.25.3/docker-compose-\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003euname -s\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e-\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003euname -m\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e -o /usr/local/bin/docker-compose\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"国内安装x86\"\u003e国内安装(x86)\u003c/h2\u003e\n\u003cp\u003e参考daocloud的\u003ca href=\"https://get.daocloud.io/#install-compose\"\u003ehttps://get.daocloud.io/#install-compose\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e2\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-\u003cspan class=\"sb\"\u003e`\u003c/span\u003euname -s\u003cspan class=\"sb\"\u003e`\u003c/span\u003e-\u003cspan class=\"sb\"\u003e`\u003c/span\u003euname -m\u003cspan class=\"sb\"\u003e`\u003c/span\u003e \u0026gt; /usr/local/bin/docker-compose\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod +x /usr/local/bin/docker-compose\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"嵌入式系统安装arm64\"\u003e嵌入式系统安装(ARM64)\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt-get install -y python python-pip libffi-dev \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e//如果不安装libffi-dev，在安装docker-compose的时候会报错，提示找不到ffi.h文件\u003c/p\u003e","title":"Docker-Compose的快速安装"},{"content":"检查内核docker支持 1 curl -L https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh | /bin/bash /dev/stdin 安装docker 官方安装 参照https://docs.docker.com/engine/install\n1: 安装工具 1 2 3 4 5 6 7 sudo apt-get update sudo apt-get install \\ apt-transport-https \\ ca-certificates \\ curl \\ gnupg-agent \\ software-properties-common H6加载aufs\n1 sudo apt-get -y install aufs-tools 2: 安装GPG证书 1 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 3: 写入软件源信息 amd64 1 sudo add-apt-repository \u0026#34;deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable\u0026#34; arm64 1 sudo add-apt-repository \u0026#34;deb [arch=arm64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable\u0026#34; 4 安装软件 1 2 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io 5: 查找特定版本 1 2 sudo apt-get update sudo apt-cache madison docker-ce 阿里云镜像安装 版本选择 H6核心版内核可使用最高版本\n1 export VERSION=\u0026#34;5:19.03.5\u0026#34; 安装 1 curl -fsSL https://get.docker.com | bash -s docker –mirror Aliyun 版本验证 1 docker info 镜像加速设置 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器\n1 2 3 4 5 6 7 8 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json \u0026lt;\u0026lt;-\u0026#39;EOF\u0026#39; { \u0026#34;registry-mirrors\u0026#34;: [\u0026#34;https://registry.docker-cn.com\u0026#34;] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 官方国内镜像 https://registry.docker-cn.com\n网易 http://hub-mirror.c.163.com\n中国科技大学 https://docker.mirrors.ustc.edu.cn\n查看docker运行状态 1 2 sudo docker info sudo systemctl status docker 常用命令 例子：在后台运行nginx，并将容器的80端口映射为宿主机的91端口。\n1 docker run -d -p 91:80 nginx -d：后台运行 -P：随机端口映射 -p：指定端口映射 -net：网络模式\n· docker ps：列出运行中的容器\n· docker ps -a ：列出所有的容器\n· docker stop 容器id：停止容器\n· docker kill 容器id：强制停止容器\n· docker start 容器id：启动已停止的容器\n· docker inspect 容器id：查看容器的所有信息\n· docker container logs 容器id：查看容器日志\n· docker top 容器id：查看容器里的进程\n· docker exec -it 容器id /bin/bash：进入容器\n· exit：退出容器\n· docker rm 容器id：删除已停止的容器\n· docker rm -f 容器id：删除正在运行的容器\n","permalink":"https://qu.js.cn/linux-install-docker/","summary":"\u003ch2 id=\"检查内核docker支持\"\u003e检查内核docker支持\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -L https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh \u003cspan class=\"p\"\u003e|\u003c/span\u003e /bin/bash /dev/stdin\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"安装docker\"\u003e安装docker\u003c/h2\u003e\n\u003ch3 id=\"官方安装\"\u003e官方安装\u003c/h3\u003e\n\u003cp\u003e参照\u003ca href=\"https://docs.docker.com/engine/install\"\u003ehttps://docs.docker.com/engine/install\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"1-安装工具\"\u003e1: 安装工具\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e2\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e3\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e4\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e5\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e6\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e7\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get install \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    apt-transport-https \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ca-certificates \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    curl \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    gnupg-agent \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    software-properties-common\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cblockquote\u003e\n\u003cp\u003eH6加载aufs\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get -y install aufs-tools\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch3 id=\"2-安装gpg证书\"\u003e2: 安装GPG证书\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg \u003cspan class=\"p\"\u003e|\u003c/span\u003e sudo apt-key add -\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch3 id=\"3-写入软件源信息\"\u003e3: 写入软件源信息\u003c/h3\u003e\n\u003ch4 id=\"amd64\"\u003eamd64\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo add-apt-repository \u003cspan class=\"s2\"\u003e\u0026#34;deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003elsb_release -cs\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e stable\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch4 id=\"arm64\"\u003earm64\u003c/h4\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo add-apt-repository \u003cspan class=\"s2\"\u003e\u0026#34;deb [arch=arm64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003elsb_release -cs\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e stable\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch3 id=\"4-安装软件\"\u003e4 安装软件\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e2\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get install docker-ce docker-ce-cli containerd.io\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch3 id=\"5-查找特定版本\"\u003e5: 查找特定版本\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e2\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-cache madison docker-ce\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch3 id=\"阿里云镜像安装\"\u003e阿里云镜像安装\u003c/h3\u003e\n\u003ch4 id=\"版本选择\"\u003e版本选择\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cp\u003eH6核心版内核可使用最高版本\u003c/p\u003e","title":"Ubuntu安装docker的方法"},{"content":"目标 由于电信运营商改造后IPV4变成内网固定IP，使得内网穿透变得更加麻烦。\n虽然运营商提供的全网IPV6地址没有时间限制，但是断网后或者宽带重拔后IPV6依然会重新分配更新，所以还是需要使用IPV6动态域名解析。\n原理 使用GO版本的客户端调用阿里云云解析API，实现IPV6的动态域名解析。\n参照https://github.com/honwen/aliyun-ddns-cli实现。\n阿里云设置 右上角用户 / 访问控制 / 人员管理 / 用户 / 创建用户\n填写登录名称，显示名称，选择编程访问启用 AccessKey ID 和 AccessKey Secret；\n记录AccessKey以便后面使用，设置用户权限为AliyunDNSFullAccess。\n执行命令 环境变量：\nAccessKeyID 阿里云访问ID\nAccessKeySecret 阿里云访问密钥\n1 aliyun-ddns-cli --id ${AccessKeyID} --secret ${AccessKeySecret} --ipapi http://v6.ipv6-test.com/api/myip.php auto-update -6 --domain qu.js.cn -r 600 结束语 目前移动网络已支持IPV6，固定宽带需要路由器支持IPV6，80端口封禁，443端口有可能开启。\n","permalink":"https://qu.js.cn/aliyun-ipv6-ddns/","summary":"\u003ch2 id=\"目标\"\u003e目标\u003c/h2\u003e\n\u003cp\u003e由于电信运营商改造后IPV4变成内网固定IP，使得内网穿透变得更加麻烦。\u003c/p\u003e\n\u003cp\u003e虽然运营商提供的全网IPV6地址没有时间限制，但是断网后或者宽带重拔后IPV6依然会重新分配更新，所以还是需要使用IPV6动态域名解析。\u003c/p\u003e","title":"借用阿里云实现IPV6的动态域名解析"},{"content":"下载 目前arm64的下载链接为https://dl.google.com/go/go1.15.6.linux-arm64.tar.gz\n安装 下载 1 wget https://dl.google.com/go/go1.15.6.linux-arm64.tar.gz 解压 1 tar -C /usr/local -xzf go1.15.6.linux-arm64.tar.gz 授权 1 chmod +x /usr/local/go/bin/go 版本验证 1 /usr/local/go/bin/go version 环境配置 1 vim /etc/profile 文件末尾添加以下内容\n1 2 3 export GOROOT=/usr/local/go export GOPATH=/home/maxim/go_workshop //代码目录，自定义即可 export PATH=$PATH:$GOPATH/bin:$GOROOT/bin 重新加载profile文件，加载环境变量到内存。\n1 source /etc/profile 一般gopath目录下新建三个文件夹，分别是src（源代码目录），pkg（包编译成的.a文件存放位置），bin（可执行文件）。\n其实还有GOBIN之类的环境变量，都是可以设置，因人而异。设置GOBIN ，可执行文件，就会生成在这个目录下，默认在GOPATH\\bin下。\n结束 在任意目录查看安装版本\n1 go version 最新源码地址https://github.com/golang/go/releases；\n可参照https://github.com/golang/go进行编译。\n","permalink":"https://qu.js.cn/install-golang-arm64-ubuntu/","summary":"\u003ch2 id=\"下载\"\u003e下载\u003c/h2\u003e\n\u003cp\u003e目前arm64的下载链接为\u003ca href=\"https://dl.google.com/go/go1.15.6.linux-arm64.tar.gz\"\u003ehttps://dl.google.com/go/go1.15.6.linux-arm64.tar.gz\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"安装\"\u003e安装\u003c/h2\u003e\n\u003ch3 id=\"下载-1\"\u003e下载\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget  https://dl.google.com/go/go1.15.6.linux-arm64.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch3 id=\"解压\"\u003e解压\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-Shell\" data-lang=\"Shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etar -C /usr/local -xzf go1.15.6.linux-arm64.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch3 id=\"授权\"\u003e授权\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod +x /usr/local/go/bin/go\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch3 id=\"版本验证\"\u003e版本验证\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-Shell\" data-lang=\"Shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e/usr/local/go/bin/go version\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"环境配置\"\u003e环境配置\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evim /etc/profile \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e文件末尾添加以下内容\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e2\n\u003c/span\u003e\u003cspan class=\"lnt\"\u003e3\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eGOROOT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/local/go\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eGOPATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e/home/maxim/go_workshop //代码目录，自定义即可\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e:\u003cspan class=\"nv\"\u003e$GOPATH\u003c/span\u003e/bin:\u003cspan class=\"nv\"\u003e$GOROOT\u003c/span\u003e/bin\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e重新加载profile文件，加载环境变量到内存。\u003c/p\u003e","title":"Arm64 ubuntu中安装golang"},{"content":"前言 由于需要在ARM64的linux中进行摄像头图像识别，所以参照https://gocv.io/getting-started/linux/编译安装GO版本的opencv即GoCV。\n准备 安装Golang，可参照Arm64 ubuntu18中安装golang。\n安装 安装GoCV包: 1 go get -u -d gocv.io/x/gocv 进入gocv下载目录 1 cd $GOPATH/src/gocv.io/x/gocv 在当前目录下进行以下操作。\n快速安装 1 make install 编译时间比较长，全志H6大概需要近三个半小时。若一切正常编译安装后结果如下。\n1 2 gocv version: 0.22.0 opencv lib version: 4.2.0 可能的问题 git clone太慢 将链接中github.com改为github.com.cnpmjs.org\nopencv.zip与 opencv_contrib.zip下载不稳定 根据Makefile，将opencv.zip与 opencv_contrib.zip下载链接先行下载，然后修改Makefile注释curl，直接复制opencv.zip与opencv_contrib.zip至指定目录。\n1 2 3 4 5 6 7 8 9 10 11 12 download: rm -rf $(TMP_DIR)opencv mkdir $(TMP_DIR)opencv cd $(TMP_DIR)opencv #curl -Lo opencv.zip https://github.com/opencv/opencv/archive/$(OPENCV_VERSION).zip cp /home/maxim/go_workspace/src/gocv.io/x/gocv/opencv.zip $(TMP_DIR)opencv/opencv.zip unzip -q opencv.zip #curl -Lo opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/$(OPENCV_VERSION).zip cp /home/maxim/go_workspace/src/gocv.io/x/gocv/opencv_contrib.zip $(TMP_DIR)opencv/opencv_contrib.zip unzip -q opencv_contrib.zip rm opencv.zip opencv_contrib.zip cd - boostdesc_bgm.i等文件未下载 查看 build 文件夹下的日志文件 CMakeDownloadLog.txt，在该文件中搜索定位 boostdesc_bgm.i。\n发现文件下载失败主要是“连接raw.githubusercontent.com|151.101.228.133|:443… 失败：拒绝连接”，在wget直接下载日志中的相关地址，发现 151.101.228.133当前无法使用，但151.101.108.133可以使用，在hosts中添加151.101.108.133 raw.githubusercontent.com，重新开始编译下载拒绝问题解决。\n若 151.101.108.133 也无法使用，可直接复制其日志中的下载地址到浏览器，若还能查看该文件的源码，可直接拷贝源码另存为同名文件，放在 opencv_contrib/modules/xfeatures2d/src/ 路径下。\n缺失几个文件就拷贝几个，一般无法下载的文件如下：\nboostdesc_bgm.i\nboostdesc_bgm_bi.i\nboostdesc_bgm_hd.i\nboostdesc_lbgm.i\nboostdesc_binboost_064.i\nboostdesc_binboost_128.i\nboostdesc_binboost_256.i\nvgg_generated_120.i\nvgg_generated_64.i\nvgg_generated_80.i\nvgg_generated_48.i\n","permalink":"https://qu.js.cn/compile-install-gocv/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e由于需要在ARM64的linux中进行摄像头图像识别，所以参照\u003ca href=\"https://gocv.io/getting-started/linux/\"\u003ehttps://gocv.io/getting-started/linux/\u003c/a\u003e编译安装GO版本的opencv即GoCV。\u003c/p\u003e\n\u003ch2 id=\"准备\"\u003e准备\u003c/h2\u003e\n\u003cp\u003e安装Golang，可参照\u003ca href=\"/install-golang-arm64-ubuntu/\"\u003eArm64 ubuntu18\u003c/a\u003e中安装golang。\u003c/p\u003e\n\u003ch2 id=\"安装\"\u003e安装\u003c/h2\u003e\n\u003ch3 id=\"安装gocv包\"\u003e安装GoCV包:\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ego get -u -d gocv.io/x/gocv\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003ch3 id=\"进入gocv下载目录\"\u003e进入gocv下载目录\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv class=\"chroma\"\u003e\n\u003ctable class=\"lntable\"\u003e\u003ctr\u003e\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"lnt\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd class=\"lntd\"\u003e\n\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-SHELL\" data-lang=\"SHELL\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"nv\"\u003e$GOPATH\u003c/span\u003e/src/gocv.io/x/gocv\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e在当前目录下进行以下操作。\u003c/p\u003e","title":"全志H6开发板ubuntu编译安装GOCV(opencv 4.2.0)"}]