分类 软件技术 下的文章

在Windows下使用C语言开始Raspberry Pi Pico开发

什么是Raspberry Pi Pico:

最近,树莓派基金会推出了一款开发板,名为Raspberry Pi Pico。这是一块小巧快速用途广泛的最小系统开发板,它使用的是树莓派基金会自研的RP2040微控制器。树莓派官网标价为4$,国内购买价格大约30元人民币(不含邮费)。

RP2040微控制器有以下特性:两个ARM Cortex-M0+内核最高频率133MHz、 264KB的内部RAM、DMA控制器,支持挂最高达16MB的片外Flash。它有30个GPIO,4个可以作为模拟输入。外设包含2个UART、2个SPI、2个I2C、16个PWM通道以及一个USB1.1控制器。

Raspberry Pi Pico开发板支持通过C/C++或MicroPython语言进行开发,树莓派基金会官方提供了大量、详细的资料。它有一枚2MByte的SPI Flash用于存储固件,一枚RT6150B作为电源管理,一个Micro-USB接口用于供电和传输数据(包含下载固件)。板子采用40 pin 21x51 'DIP'设计,焊接排针后可以方便的使用在面包板上,同时邮票孔设计可以方便将 Pico 作为核心板贴装到其他电路板上。方便DIY爱好者实验用途的同时也兼顾了商业批量用途时的贴片安装。板子上共有26个3.3V GPIO,其中23个是纯数字IO,3个可以作为ADC使用。另外板子上有一个3Pin的ARM SWD接口用于调试,一个BOOTSEL按钮用于进入固件下载模式。它还有一个板载的LED指示灯连接在GPIO25上。

准备工作:

学习本文内容需要做如下准备:

  • Raspberry Pi Pico开发板和MicroUSB数据线,方便下载程序验证。
  • 运行Windows10的电脑,其他Win系统笔者无力测试,本文不适用Linux系统。
  • 足够的存储空间,建议至少8GB,因为C的工具链中某些工具或库会很大。

警告:以下的某些操作可能对您电脑中现有的某些工具链产生影响,如果您的电脑中有其他重要生产环境,谨慎考虑是否实践本文内容。如果您对此了解,相信您也能够解决遇到的问题。本人不会也没有技术对任何结果负责。

下载固件和体验MicroPython:

新接触到一款MCU或开发板,首先需要研究的就是如何搭建编译环境以及如何下载固件。大多我们需要先搭环境写出点灯程序,然后再进行固件下载。考虑此开发板支持MicroPython,且官方提供了已经编译好的MicroPython固件,在搭建开发环境前,我们可以先体验一番固件下载方式,顺便试一下MicroPython是如何点灯的。我们可以直接在官方如何开始页面,点击Getting Started with MicroPython。然后在网页上点击Download UF2 File下载文件。

文件下载完成后,按住BOOTSEL键,插入连接电脑的USB后松开BOOTSEL键,电脑上会显示一个名为RPI-RP2的大容量存储设备。将MicroPython UF2文件拖放到RPI-RP2卷上。Pico将重新启动,然后就可以使用串口工具连接MicroPython了。

我们可以在设备管理器里看到开发板串口的端口号,然后我们使用串口工具连接端口,波特率为9600。连接后可以按Ctrl+D软重启,此时应该可以看到相关提示信息。如下:

MPY: soft reboot
MicroPython v1.14 on 2021-02-05; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>>

官方推荐了Thonny,可以点击其官网右上角超链接下载最新版本。安装后点击工具设置,在解释器选项卡下设置解释器为Pico,并正确设置端口号。即可在下面的Shell窗口中看到提示信息。

逐行输入以下代码(>>>忽略)可以点亮板上LED:

>>> from machine import Pin
>>> led = Pin(25, Pin.OUT)
>>> led.value(1)

如果硬件正常,操作没有问题,此时板载LED已经点亮。我们便学会了如何下载固件和使用MicroPython点亮LED灯。如果想继续学习MicroPython,可参阅官方文档。

搭建C/C++编译环境:

安装工具链:

搭建编译环境的环节是必不可少的。我们首先按照文档说明安装工具链(Toolchain)。

我们需要安装的工具有:

  1. ARM GCC compiler(Windows 系统下载gcc-arm-none-eabi-XX-20XX-XX-major-win32.exe)
  2. CMake
  3. Build Tools for Visual Studio 2019(从下方的所有下载处展开VS2019工具,选择下载生成工具)
  4. Python 3(需要下载Python3,而不是Python2)
  5. Git

注意:

  1. ARM GCC compiler安装过程的最后一步,需要勾选Add path to environment variable,然后再点Finish完成安装;CMake安装过程中,InstallOptions页面要选择Add Cmake to the system PATH for all users。如果以上两个环境变量相关设置不正确,则会导致编译过程相关命令无法调用而失败。
  2. 通过VS2019生成工具下载器安装生成工具的时候,只需要在工作负载中勾选安装C++ 生成工具即可,其他不需要选择。右侧的可选功能会自动帮你选好,不要取消勾选 。也不要对存储空间占用有怀疑,这套工具确实非常大。
  3. 安装Python时需要选择Customize installation,然后在Advance Options页勾选Install for all users、Add Python to environment variables,并设置安装路径,最后点击Install开始安装,安装完成后还需要点击Disable path length limit以允许忽略MAX_PATH限制。
  4. 安装Git时,树莓派基金会官方文档做了如下要求(建议):需要换掉默认的vim编辑器,比如我换成了notepad++(因为使用vim需要极强的专业性,Git本身也建议换掉,但感觉是非必须项);后面的设置需要勾选third-party tools,勾选Checkout as is, commit as-is,还需要勾选Enable experimental support for pseudo consoles。

获取SDK和样例:

参考以下代码使用Git获取SDK和样例,具体使用的文件目录按情况自行配置:

C:\Users\pico\Downloads> git clone -b master https://github.com/raspberrypi/pico-sdk.git
C:\Users\pico\Downloads> cd pico-sdk
C:\Users\pico\Downloads\pico-sdk> git submodule update --init
C:\Users\pico\Downloads\pico-sdk> cd ..
C:\Users\pico\Downloads> git clone -b master https://github.com/raspberrypi/pico-examples.git

开始菜单搜索我习惯搜索Dev),找到Developer Command Prompt for VS 2019并启动它,然后在里面运行以下命令设置SDK路径(引号中的具体路径按实际情况填写):

C:\Users\pico\Downloads> setx PICO_SDK_PATH "..\..\pico-sdk"

关闭当前的窗口,重新打开Developer Command Prompt for VS 2019,这样环境变量应该就生效了。

导航到pico-examples目录下,通过以下命令尝试编译样例项目,以验证编译工具链是否正确配置:

C:\Users\pico\Downloads> cd pico-examples
C:\Users\pico\Downloads\pico-examples> mkdir build
C:\Users\pico\Downloads\pico-examples> cd build
C:\Users\pico\Downloads\pico-examples\build> cmake -G "NMake Makefiles" ..
C:\Users\pico\Downloads\pico-examples\build> nmake

如果没有错误,能够正常完成编译,能够在pico-examples\build下看到uf2文件,并且按照前文的方式将固件下载到Pico中后LED按照1s周期闪烁。即表示编译工具链可正常工作。

注意:以上必须使用Developer Command Prompt for VS 2019而不是系统自带的命令提示符,因为使用此工具会自带相关环境变量,而系统的命令提示符没有,使用系统的命令提示符执行操作无法成功编译。

自建工程:

确认编译工具链正常后,我们便可以开始尝试写一个自己的工程了,这在SDK的RADEME.md文件中有介绍。文档中的介绍是基于Linux系统的,但没关系,工程的目录结构是通用的,我们可以参考。以下我们参考文档建一个闪灯程序。

  1. 在合适的地方新建一个文件夹,以工程名字命名,名字建议避免使用中文和特殊符号。此处我命名为:Blinks。在文件夹内再建一个名为build的文件夹,用于存储编译后的文件。

  2. pico-sdkexternal文件夹下的pico_sdk_import.cmake复制到工程文件夹下(即Blinks下)。

  3. Blinks文件夹下建立名为blinks.c的源代码文件,在此文件中编写程序源代码。比如闪灯程序源代码如下:

     #include "pico/stdlib.h"
    
     const uint LED_PIN = 25;
    
     int main() {
         gpio_init(LED_PIN);
         gpio_set_dir(LED_PIN, GPIO_OUT);
         while (true) {
             gpio_put(LED_PIN, 1);
             sleep_ms(100);
             gpio_put(LED_PIN, 0);
             sleep_ms(100);
         }
     }
  4. 在工程文件夹下创建CMakeLists.txt文件,内容参考如下。以#开始的行是注释,用于解释,编写代码时请勿直接抄写,建议使用英文注释。

    cmake_minimum_required(VERSION 3.12)
    
    # 引入SDK (必须写在下面的project行前)
    include(pico_sdk_import.cmake)
    
    # 工程名,比如Blinks
    project(Blinks)
    
    # 初始化SDK
    pico_sdk_init()
    
    #添加项目的源文件,比如此处我们添加的blinks.c源文件
    add_executable(blinks
            blinks.c
            )
    
    # 引入pico_stdlib库
    target_link_libraries(blinks pico_stdlib)
    
    # 创建map/bin/hex 等文件.
    pico_add_extra_outputs(blinks)
  5. 打开Developer Command Prompt for VS 2019,通过以下命令编译项目。

    C:\Users\pico\Downloads> cd Blinks
    C:\Users\pico\Downloads\Blinks> cd build
    C:\Users\pico\Downloads\Blinks\build> cmake -G "NMake Makefiles" ..
    C:\Users\pico\Downloads\Blinks\build> nmake
  6. 如果一切正常,我们便可以在build文件夹下得到项目编译产生的文件,其中的uf2文件可以按前文方法下载到Pico开发板中验证,看运行结果是否与代码设计一致。

结语:

至此,我们便学会了Raspberry Pi Pico开发板点灯,后面具体可参考树莓派基金会官方提供的相关文档学习。祝大家学习顺利。

参考:

  1. 官方产品页:https://www.raspberrypi.org/products/raspberry-pi-pico/
  2. Getting-started:https://www.raspberrypi.org/documentation/pico/getting-started/
  3. Pico-SDK代码:https://github.com/raspberrypi/pico-sdk
  4. Pico-example代码:https://github.com/raspberrypi/pico-examples

Flash停止服务导致Fliqlo失效无法显示的处理方案

Flash停止服务导致Fliqlo失效无法显示的处理方案

前言:

Fliqlo是一款时钟屏保程序,很多人都在使用它。如果你对此没有印象,想一想,是否有见到很多科技视频作者电脑的屏保,是一个黑底白字的翻页时钟?十有八九是这个屏幕保护程序。2021年一月份的某一天,我秃然发现自己Windows10电脑的Fliqlo时钟屏保不能正常显示了。取而代之显示的是一个右下角带有 i 圆标的Flash标志。众所周知, i 表示information,这个图标是想要告诉我们一个关于Flash的信息,但是它并没有办法显示具体信息。联想到Flash是一项已经淘汰的技术,当即想到前几天某车站因Flash停止服务导致调度瘫痪、无法运行的新闻。网上查询,了解到Adobe官方有表示:无论是否卸载Flash,2021年一月份Flash将停止运行。我们可以得出结论,Flash停止服务导致了Windows下Fliqlo失效。题外话:一切的一切提醒我们,Flash这项技术真的到了该淘汰的时候了。Flash淘汰,2G网络淘汰,某项技术无论先前应用多么广泛,终有被更先进的技术淘汰的一天。我们自然也需要不断学习先进技术,避免自己被淘汰。
Flash_Info.jpg

解决方案

方案一:升级Fliqlo至最新版本

应用程序失效,排除自己操作问题后,首要想到的当然是尝试联系软件开发商。我在Fliqlo的官网看到了新版本的Change Log,目前的最新版本为1.4版,发布于2021年01月12日,最首要的改变就是 “不需要Flash Player” 。既然如此,我们更新到最新版应该就可以了。按照官方的指导,不能直接安装升级,我们需要先在应用和功能(程序和功能)里面卸载旧版本的Fliqlo,卸载后重启电脑。在个性化设置中的屏幕保护程序设置中检查,确认Fliqlo已经消失,否则可以手动在 C:/Windows 目录下搜索Fliqlo,将相关文件手动删除。然后运行Fliqlo 1.4 的安装程序进行安装。

Fliqlo的官网在中国大陆貌似难以直接打开,我们可能需要通过代理访问。此处提供一个下载链接,失效不补。

新版本的Fliqlo除了不需要Flash,还有一些其他改变。比如,设置移动到了屏保程序内部,可以在预览屏幕保护程序是点击鼠标,在下方修改相关设置。正因如此,新版的Fliqlo目前无法通过移动鼠标或点击鼠标退出屏保,而是只能通过按键盘退出屏保。这可能会让某些人不习惯。另一个改变是,添加了通过网络自动更新的功能,不知是否与此有关,我的在使用时经常会出现一个问题,在进入屏幕保护程序前有网络加载提示。且若关闭电脑网络,这个新版本根本不能正常显示时钟效果。新版本的不适应让我们考虑寻找其他方案。

方案二:安装使用中国企业版Flash或修改版Flash

既然Flash不能正常运行,我们想办法让Flash运行就可以了。网上了解到,因为Adobe Flash在中国是有单独公司运营的,为了中国政府网站等使用Flash的情况,有提供企业版本可以使用的Flash供大家使用。或也可使用网友们魔改的Flash来解决此问题。考虑Flash作为一项淘汰技术,本着考虑使用淘汰技术存在不稳定,不安全性,本着不断学习新技术而不是守旧的原则,本文不研究此方案具体方法,需要的可自行从网上搜索如何让自己的计算机可以继续使用Flash。

方案三:寻找其他替代应用

在GitHub上,有一个叫做FlipIt的开源项目,作者叫:phaselden。这个项目是用C#写的,要求电脑使用Windows系统,有安装 .NET Framework 4.8。最近因为Fliqlo出现的问题,导致很多人去寻找替代方案,好多人关注到了GitHub上的这个项目。有网友对标Fliqlo提了几个Issues,估计作者看到很多人关注他的项目也很有成就感,于是在积极完善项目。最近已经连续更新了好几次版本。仅仅几天,作者将没有12/24小时制、大小调整、需要手动在系统中安装字体这些问题全部解决了,它还为双显示器提供了副屏和主屏不同内容显示的模式,这点非常赞。经过短期体验,个人感觉最新版本的使用体验不错,可以平滑替代Fliqlo,所以在此推荐大家使用。

OpenIPC系统博云摄像头替换minihttp

OpenIPC系统博云摄像头替换minihttp

前言

大佬Sean.Y发布了新编译的minihttp,功能方面添加了暗环境开红外切换黑白画面。我们只需要把摄像头中原来的文件替换一下即可用上新功能。本文就拿此事来水一下。

准备

1,已经刷好OpenIPC固件的摄像头
2,SSH工具软件
3,格式化为fat32的存储卡

正文

1,准备一张格式化为fat32的存储卡,使用之前刷固件的存储卡需注意删除相关固件文件,以免误操作再次刷机,给搞机带来不便。
2,获取minihttp 2020.04.24.zip文件,解压到存储卡,将存储卡插入摄像头。
3,运行以下命令检查能否看到存储卡中的minihttpminihttp.ini文件,能看到进行下一步:

ls /mnt/mmc

4,逐行运行以下命令杀掉minihttp进程,并将原来的文件重命名为[filename].old,以备后期万一想恢复到原来版本。

killall minihttp
mv /usr/bin/minihttp /usr/bin/minihttp.old
mv /etc/minihttp.ini /etc/minihttp.ini.old

5,逐行运行以下命令复制存储卡中相关文件到指定位置,并修改文件权限。

cp /mnt/mmc/minihttp /usr/bin/
chmod 755 /usr/bin/minihttp
cp /mnt/mmc/minihttp.ini /etc/
chmod 644 /etc/minihttp.ini

6,执行以下命令重启。

reboot

注:如果需要修改分辨率、运行的服务开关等配置,请使用vi编辑器编辑/etc/minihttp.ini文件。
注:若想恢复之前备份的版本请使用以下命令(删除当前版本文件并将备份的文件名字改回原始文件名,然后重启)

killall minihttp
rm -f /usr/bin/minihttp /etc/minihttp.ini
mv /usr/bin/minihttp.old /usr/bin/minihttp
mv /etc/minihttp.ini.old /etc/minihttp.ini
reboot

博云摄像头学习笔记

前言

偶然的机会得知,博云公司倒闭流出一批云摄像头。然后有一群大佬在为其做二次开发。这种学(jian)技(la)术(ji)的事情肯定不能落下我,遂入坑。截至本文发文,大佬们已经做出替换uboot,并发布了测试版本的固件。本文旨在以更详(luo)细(suo)的描述,对学习过程进行记录,也可用于引导小白入坑。本文内容是根据阅读大佬们写的文档,观察分享群中大家讨论的内容结合自己操作纂写,内容仅供参考。

操作警告:

为嵌入式设备刷入自定义固件是一个需要细心的事情。您可能会因此损坏您的设备,所以请务必小心操作!使用本指南和相关固件需要您自担风险。固件开发者和笔者都不会对您设备可能发生的损坏负责。

目录:

  • 准备
  • 拆机并连接TTL线
  • 备份原始固件(暂无)
  • 刷入新固件
  • 配置网络

准备:

1,2.5mm十字(PH0)螺丝刀;
2,USB转TTL线;
3,存储卡;
4,串口工具软件(本人使用PUTTY)

拆机并连接TTL线:

1,使用螺丝刀拆除底壳上的四颗螺钉(保修贴纸下有一颗)。小心打开底壳,注意不要扯断扬声器和Zigbee天线的连接线。在CC2530模块附近找到J3连接器空焊盘(3个排在一起),此处为TTL接口,此接口从方形焊盘处起,依次为GND、TXD、RXD。
2,设法连接USB转TTL模块,可使用烙铁焊接,亦可使用杜邦线、飞机勾等测试工具做可靠连接。将摄像头板的TXD连接到USB转串口小板的RXD,摄像头板的RXD连接到USB转串口小板的TXD,摄像头板的GND连接到USB转串口小板的GND。
注:TTL是这样的,TXD意思是发送,RXD意思是接收,GND表示电路中的0V电位处,一般连接到电源的负极,VCC为电源。A和B通过TTL通信,A的发送要连接B的接收;A的接收则连接B的发送;GND作为0电位的参考,直接连接。需要注意的是:VCC线一般不连接,因为目标板和TTL小板的电压不一定是相同的;且TTL小板取自电脑USB口的供电,输出能力有限,可能无法提供稳定的供电。仅当您十分清楚连接VCC后果时连接,否则可能出现损坏设备的危险!
3,接线检查无误,USB转TTL小板插入电脑USB口,因其有多种型号,根据不同型号的TTL转接小板,自行安装好驱动程序。笔者建议使用CH340或CP2102小板,不推荐PL2303。
4,安装好驱动后在电脑上的计算机图标上右击,打开管理,选择设备管理器(Win10可按快捷键Win+X,然后按M键进入设备管理器);在端口分支下查看自己的USB转TTL小板的串口端口号并记住,留作稍后连接时使用。

备份原始固件

此部分暂无,待大佬们补充

刷入新固件

1,将准备好的存储卡通过读卡器连接到电脑,请确保存储卡中没有重要文件,接下来的操作将清空存储卡中已有文件。在Windows资源管理器中右击对应盘符,选择格式化,设置文件系统为FAT32格式,勾选快速格式化,其他保持默认。点击开始,等待其格式化完成。
注:如果Windows系统的格式化功能没有FAT32选项,可使用Windows系统自带的Diskpart工具清空存储卡,并创建FAT32分区。按Win+R键打开运行对话框,输入diskpart回车,在打开的Diskpart工具窗口中输入list disk列出所有磁盘,找到存储卡对应的磁盘编号,输入select disk 存储卡编号回车选定要操作的磁盘为存储卡,输入clean命令清空存储卡,输入create partition primary创建主分区,输入format fs=fat32 quick快速格式化刚才创建的主分区为FAT32格式。
2,下载最新版本的固件,目前为firmware-20200420.tar.gz。将压缩包内的文件解压到存储卡中。安全弹出存储卡,将其插入摄像头板的存储卡插槽。
3,打开串口终端软件,选择串口协议(Serial),端口处选择或填入刚才记下的串口号,设置波特率为115200、数据位8、停止位1、无奇偶校验、无流控。确认设置正确并再次检查接线无误后打开串口,注意关闭中文输入法。
笔者使用PUTTY,下载合适版本安装并打开。在Session页面中的Connection type下选择Serial。在Category中点击进入Serial选项卡,在Select a serial line中输入上文记下的端口号,下面的Speed(baud)中填入115200,Data bits填8,Stop bits填1,Parity和Flow control皆选择None。点击Category中的Session回到Session页面,在Saved Sessions下输入一个好记的名字,点击Save保存以备下次串口意外中断后再次使用。最后检查设置无误后双击你设置的那个好记的名字打开串口,注意关闭中文输入法。
4,将摄像头板插电源线上电,随后开始不停按回车键。以中断uboot,不自动启动系统。直到出现类似以下内容停止按回车:

Partition 1: Filesystem: FAT32 "NO NAME    "
reading update.img
read update.img sz -1 hdr 64
update.img not found
Hit any key stop autoboot :  0
hisilicon #
hisilicon #
hisilicon #

注:如果5秒内没有进入这个界面,则可能中断失败了,断开摄像头板电源,使用读卡器连接电脑检查存储卡文件是否被损坏,若有损坏请重做前面操作制作存储卡升级工具(建议直接重新做卡)。然后重新上电尝试对其中断,依然不可建议检查USB转TTL小板是否可靠连接。
5,依次执行以下命令,每输入一行敲回车并等待其执行完毕,观察回显信息无异常后继续执行下一条:

sf probe 0
sf lock 0
fatload mmc 0 0x82000000 u-boot.20200419.bin
sf erase 0x0 0x80000
sf write 0x82000000 0x0 $(filesize)
reset

警告:若在执行fatload mmc 0 0x82000000 u-boot.20200419.bin命令后出现类似以下信息,请勿执行下一句命令!尝试检查存储卡中文件。否则必砖!

bad MBR sector signature 0x ...
** Unable to use mmc 0:1 for fatload **

注:以下正常回显信息供大家参考,若某一句命令执行后回显信息与此不同,请检查原因,切勿随意继续执行:

hisilicon # sf probe 0
16384 KiB hi_fmc at 0:0 is now current device
hisilicon # sf lock 0
unlock all block.
hisilicon # fatload mmc 0 0x82000000 u-boot.20200419.bin
reading u-boot.20200419.bin

273960 bytes read
hisilicon # sf erase 0x0 0x80000
Erasing at 0x80000 -- 100% complete.
hisilicon # sf write 0x82000000 0x0 $(filesize)
Writing at 0x42e28 -- 100% complete.
hisilicon # reset

6,随后摄像头板自动重启,重启后会自动开始升级,请观察串口输出,等待其升级完毕后摄像头自动进入OpenWrt。升级过程中请勿断电,升级完成后请取下存储卡,否则下次启动会自动再次进入升级。
注意:
若您已经刷过之前发布的旧版系统,升级后需要在进入OpenWrt后通过TTL接口执行firstboot命令清空配置,然后再继续下文的网络配置,否则会出现问题。

注意:
u-boot,kernel,rootfs这三个文件,是自动升级使用的,不要直接手动刷入分区。
如果需要自己手动将文件刷到分区,请使用以下这三个文件,手动刷入方式不在本文讨论范围内。
u-boot.20200419.bin
openwrt-hi35xx-18ev200-default-uImage
openwrt-hi35xx-18ev200-default-root.squashfs

配置网络

1,系统启动后,我们看到串口回显信息停止刷新时按回车键出现类似以下内容即可开始配置网络:

BusyBox v1.23.2 (2020-04-19 13:20:45 CST) built-in shell (ash)


 ___                  _  ___  ___
/   \ ___  ___  _  _ | ||   \/  _|
| | ||   \/ _ \| \| || || | || |
| | || | |  __/| \\ || ||  _/| |_
\___/|  _/\___||_|\_||_||_|  \___|.ORG
     |_|


root@ByunHawkeye:/#

2,运行以下命令用vi编辑器打开配置文件:

vi /etc/config/wireless

3,按i键进入插入模式( INSERT Mode),使用上下左右键移动光标到需要编辑的位置后面,使用Backspace键删除原来内容,输入自己的网络配置。以下部分内容中的option ssid,option keyoption encryption段需要修改为自己无线路由器的配置:

config wifi-iface
        option device 'wlan0'
        option network 'wan'
        option mode 'sta'
        option ssid 'OpenWrt'
        option key '1234567890'
        option encryption 'psk2'

以上option ssid是路由器无线网的名字,option key是无线网密码,option encryption是无线网加密方式。常见加密方式有以下几种:none(开放式无加密), wep, psk(WPA-PSK), psk2(WPA2-PSK)。需要根据自己无线路由器使用的加密方式填写。
4,修改完后确认无误,按ESC键退回到命令模式,输入wq,按回车键保存退出。
注:若修改过程中失误删除部分内容但并未保存,可按ESC回到命令模式后输入q!,按回车键不保存退出,再重新执行vi /etc/config/wireless打开即可。若该文件损坏丢失无法恢复其中内容,可尝试运行firstboot命令将系统恢复初始状态。
5,运行以下命令应用WIFI配置,并自动连接WIFI。

wifi

6,通过以上方式完成配网后运行以下命令可以在wlan0处看到摄像头的IP地址。

ifconfig

7,这样我们就可以通过浏览器输入摄像头IP访问OpenWrt管理页面,输入IP地址:8080看监控画面。
执行以下命令后连续两次输入新密码,修改root密码以备SSH登陆。

passwd

8,现在我们就可以摆脱USB转TTL线,使用SSH工具通过网络连接到摄像头了。
拆除TTL线,将摄像头重新装配。重新装配时,务必记得将天线插好。

使用U盘安装Kali系统

使用U盘安装Kali系统

前言

最近发现Kali系统默认的主题配色很好看,于是就萌生了在物理机上装一个用来学(Zhuang)习(Bi)的想法。就用我那台已经修了N遍,但还依然健在的辣鸡X200。这台辣鸡笔记本,P8700的CPU,3GRAM,千兆网口,还带一个RJ11接口。搭配一块辣鸡固态硬盘,干活非常趁手。

分区方案

虽然大家都不建议在电脑上安装双系统,且现在也已经不流行一台电脑安装多个操作系统了。但由于本人有使用此机器在Windows下工作的需求,所以还是选择安装了双系统。该机器之前是使用的Win7+Ubuntu方案,不要吐槽我Win7停止支持还继续用的问题。接下来将其变成Win7+Kali双系统,只要将Kali装到原来Ubuntu的位置即可,介绍一下分区方案。

硬盘使用的是MBR模式,共划分为5个区,因为MBR模式最多只能4个主分区,我创建了sda1~sda3三个主分区,分别为:sda1格式化为NTFS,容量100G,用于安装Win7;sda2格式化为ext4,大约40G,用于挂载根目录“/”;sda3格式化为swap,大约3G,用于做交换分区。sda4创建为扩展分区,再将其分为两个逻辑分区--sda5和sda6,sda5用于挂载Linux家目录“/home”,sda6格式化为NTFS,用于存储数据,以在两个系统下皆可访问。

安装过程

下载Kali安装镜像:

Kali的镜像可以在它的官网下载页面进行下载。这里我选择的是Kali Linux 64-Bit (Installer)2020.1b

可以尝试使用BT下载方式,或使用多线程下载工具,抑或是尝试使用迅雷下载。直接使用浏览器下载可能非常慢,且不支持断点续传便会很难受。

启动盘写入:

这里我使用的Universal USB Installer。这是个免费的工具软件,它预置了针对很多系统的写入方案。下载后运行工具,在License页面点击I Agree同意许可。在Step1中选择---Security and Penetration Testing---下的Kali Linux,Step2中选择刚才下载的kali安装镜像,Step3中选择要写入的U盘(U盘会被清空,注意备份)。点击Create,工具会提示让你再次确认操作,核实U盘选择正确后点击开始创建。当看到工具提示您结束后关闭工具,启动盘就做好了。

安装:

通过U盘安装系统,自然要让计算机从U盘启动。可以通过修改BIOS设置中启动顺序调整,将U盘调到第一序列。然后保存重启即可。大多数电脑进入BIOS的方法是开机时按DEL、F2、ESC中的某个按键。以上方法装完系统后需要再将设置的启动顺序改回来,否则可能出现插着U盘计算机不开机的情况。本人的X200支持另一种方式,开机时按F12进入启动媒体选择菜单,这个菜单只设置本次启动媒体,不会更改BIOS中的启动顺序。

插好U盘,按电源键开机,狂按F12,进入启动媒体选择菜单,选择U盘的名字。几秒后显示出U盘中Kali安装文件的启动菜单,这说明U盘已经引导成功了,我选择图形化安装模式,即Graphical install。稍作等待后出现图形化的安装向导。

首先是语言,按自己的需求选择语言,我选中文(简体),下一页提示我翻译不完整,有些地方可能用繁中和英文显示,问能不能看懂,否则不建议安装,这不废话嘛,看不懂也得上啊。然后选择地区,我选择了中国,计算机系统的地区不能随意设置,这关乎系统时钟的正常工作。接下来配置键盘映射,看了一下我的键盘布局,经验告诉我,要么接受建议的汉语,要么选英语美式键盘。这个要与自己键盘布局匹配的,否则打字会莫名奇妙出错。搞不好,设置密码都不知道自己设置的啥,那可惨了。

下一步安装程序会探测并挂载光盘,此时有可能会出现没有检测到的提示。如果出现此问题,按照网友提供的经验,可以尝试重新拔插安装U盘,有可能能解决问题。若依然不可用,可尝试按Ctrl+Alt+F2进入Shell,尝试运行fdisk -l命令列出所有磁盘分区,看安装U盘路径(比如我是/dev/sdb1),然后使用命令mount -t auto /dev/sdb1 /cdrom将U盘手动挂载到/cdrom下。然后按Ctrl+Alt+F5回到原来的图形安装界面。另外,在图形化安装界面的分区功能中也可查看U盘的路径。

按照提示设置用户名密码等配置信息,在分区功能中我选择重新格式化3个Linux下的分区,并设置好其原来功能对应的挂载点,应用并退出。

自此,应该就没有什么坑了,按照提示完成安装,等待其开机就可以使(Zhuang)用(Bi)了。

树莓派配置DS3231时钟模块

前言:

最近跟随大佬们撸电子垃圾,撸到了一台网络设备。这个设备有白色铁皮壳子,外面两根天线。打开外壳,内部有一块没有焊接USB口的树莓派 B+,通过一块扩展板连接了一枚RT5372无线网卡,并将一个USB口引出。里面有一枚16G存储卡,不知道里面啥系统,也懒得研究了。直接格式化并写入Raspbian系统。扩展板上还有一套基于DS3231 的RTC电路,测了一下,纽扣电池电量还很足,不利用起来岂不可惜?于是就有了本文。

读懂实践本文,你可能需要在技能树中点亮以下技能:
1:基本的Windows系统操作;
2:至少会使用一种工具连接到树莓派的Shell;(比如SSH工具或TTL线)
3:会为树莓派安装系统并进行初始配置;
4:基本电路知识以确保DS3231正确连接

准备:

1:安装好系统的树莓派;
2:可与树莓派连接的带电池DS3231模块;
3:与树莓派可靠的Shell连接

安装时钟模块:

本人的这台网络设备,它的DS3231时钟模块是连接在I2C1上面的,据了解市面上大多数可直插树莓派的时钟模块也是如此,因为I2C1附近易于获取电源为I2C模块供电。

1,使用gpio readall命令可以获取树莓派各IO口的状态,在此我们看到,SDA.1在40P接插件的3脚,SCL.1在5脚,3V3和GND分别在1、9脚。

 +-----+-----+---------+------+---+---Pi B+--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 | ALT0 | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 | ALT0 | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 0 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI | ALT0 | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO | ALT0 | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK | ALT0 | 0 | 23 || 24 | 1 | OUT  | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | OUT  | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi B+--+---+------+---------+-----+-----+

2:确保上面提到的四个插针可靠的与DS3231模块连接即可。

系统配置:

1:使用以下命令安装I2C工具。

sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools

2:打开I2C功能。在Shell中输入sudo raspi-config打开树莓派配置工具,移动光标选择Interfacing Options,Enter键进入;移动光标选择I2C,将其设置为Enable后退出配置工具并使用sudo reboot命令重启树莓派。
3:测试时钟模块是否正常。使用sudo i2cdetect -y 1命令探测I2C通道1上的设备地址。若能检测到地址为0x68的设备,这表明树莓派可以正常与DS3231模块通信。
4:将DS3231添加到Device Tree中。使用sudo nano /boot/config.txt命令打开配置文件,在文件末尾添加以下一行代码,按Ctrl+X,输入Y,保存并退出。

dtoverlay=i2c-rtc,ds3231

5:使用sudo reboot命令重启树莓派,然后再次使用sudo i2cdetect -y 1命令,会发现原来的0x68地址处变成了UU,此信息表示该地址设备使用中。这表明,实时时钟已经正确配置了。
此时,我们可以使用以下命令与RTC通信了:

sudo hwclock -r 显示RTC时间
sudo hwclock -s 通过RTC时间设置系统时间
sudo hwclock -w 把系统时间写入RTC
sudo hwclock --set --date="2020-04-09 14:01:08" 修改RTC时间为任意值
sudo hwclock -h 获取帮助

通过Systemd配置同步:

上文中已经配置了DS3231 RTC模块,接下来我们需要让系统开机时自动从RTC中获取时间。据说以前的Linux系统启动采用init进程,此方案启动时间长,启动脚本复杂。后来有了Systemd,事情就变得简单了。笔者接触Linux较晚,当然要用新技术。本文通过创建两个Systemd配置文件分别实现开机读取RTC时间,关机时保存时间到RTC。
1:使用以下命令打开nano并准备创建/lib/systemd/system/hwclock-sync.service文件。

sudo nano /lib/systemd/system/hwclock-sync.service

2:在出现的nano窗口中输入以下内容:

[Unit]
Description=Sync time from RTC when startup
After=fake-hwclock.service
#After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/hwclock -s
TimeoutSec=0

[Install]
WantedBy=multi-user.target

注:笔者系统中有fake-hwclock,所以配置为在fake-hwclock.service后面启动,若您的系统中没有这个软件包,请删除After=fake-hwclock.service行,并删除下一行的#号注释
3:按Ctrl+X,Y,Enter保存/lib/systemd/system/hwclock-sync.servic文件并退出。
4:使用以下命令打开nano并准备创建/lib/systemd/system/hwclock-save.service文件。

sudo nano /lib/systemd/system/hwclock-save.service

5:在出现的nano窗口中输入以下内容:

[Unit]
Description=Sync HardWare RTC to System Clock when Shutdown
DefaultDependencies=no
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/sbin/hwclock -w

[Install]
WantedBy=reboot.target halt.target poweroff.target

6:按Ctrl+X,Y,Enter保存/lib/systemd/system/hwclock-save.service文件并退出。
7:使用以下命令使以上两个配置文件开机启动:

systemctl enable hwclock-sync.servic hwclock-save.service

8:这样,我们就完成了时间同步的配置。

如何验证是否正常工作?或许首先应该排除网络时间同步(systemd-timesyncd.service)的干扰,然后大家自行研究,本文就不在此赘述了。

参考:

1:树莓派下 DS3231 时钟模块的配置(I2C接口)-树莓派实验室
2:Raspbian内建硬件驱动-Cocoonshu
3:树莓派模块:使用DS3231时钟模块
4:树莓派使用实时时钟DS3231-nick_zm
5:Linux systemd启动守护进程,service启动顺序分析及调整service启动顺序-MrWang_tju
6:Systemd 入门教程:命令篇-阮一峰
7:Systemd 入门教程:实战篇-阮一峰
8:计算机系统的时间-osoft
9:systemd关机流程 以及 自定义systemd关机脚本和服务-zhangatong