《Taylor的樹莓派》之 樹莓派3B+ 安裝CentOS 7 for ARM64

来源:https://www.cnblogs.com/luyao/archive/2018/07/08/9278982.html
-Advertisement-
Play Games

一、簡介 1.1 個人簡介 1.2 樹莓派簡介 樹莓派是什麼? 誰在玩樹莓派? 我們可以用樹莓派做什麼? 1.3 ARM簡介 在學習任何嵌入式開發之前,最先要瞭解的就是嵌入式終端的CPU架構。 樹莓派是典型的嵌入式開發板,其CPU架構自然是ARM,先來看下樹莓派3B+的硬體配置: ARM概念 CPU ...


一、簡介

1.1 個人簡介

Taylor
80後程式員,熱愛技術、追求極致,愛玩、愛折騰,10年.NET開發,熟悉.NET、Java、Python等技術。

1.2 樹莓派簡介

樹莓派是什麼?

樹莓派(Raspberry Pi),是一款只有一張信用卡大小的開源單板電腦, 它由英國的樹莓派基金會開發,目的是以低價硬體及自由軟體刺激在學校的
基本的電腦科學教育,在經歷幾代版本的更新迭代後,樹莓派不僅支持Linux以及Linux的衍生版本系統,還支持Windows 10 IoT Core等全新的系統平臺,
並且融入了眾多的AI元素,是目前全球應用最廣、最受電子愛好者、工程師、學生喜愛的開源單板電腦。

誰在玩樹莓派?

通過上文的介紹我們可以瞭解到,樹莓派最初的目的是致力於在校學生的電腦教育,無論是小學生、中學生還是大學生,都可以零基礎入門。
隨著樹莓派的不斷迭代、性能提升,其作用也在發生變化,除了電腦教育的應用,還被眾多的嵌入式開發工程師、軟體開發工程師等用來做各種實驗項目。
如果你對樹莓派或者編程感興趣,無論你是否學過電腦編程,都可以零基礎入門。

PS:《Taylor的樹莓派》系列教程會陸續發佈,希望熱愛技術的你和我一起學習!

我們可以用樹莓派做什麼?

Linux系統學習
    利用樹莓派學習Linux系統的基本操作和命令

Git伺服器
    利用樹莓派搭建區域網/外網的Git伺服器,方便個人或小團隊的代碼管理

FTP伺服器
    利用樹莓派搭建區域網/外網的FTP伺服器,建立個人或小團隊的FTP站點

消息隊列伺服器
    利用樹莓派搭建消息隊列伺服器,如:部署RPC服務端或消費者端進行消息處理等

爬蟲伺服器
    利用樹莓派搭建分散式爬蟲伺服器,如:Python+RabbitMQ+redis的高併發分散式爬蟲等

微服務部署
    利用樹莓派部署基於Docker的微服務架構API,如.NET Core、Spring Boot等

物聯網開發
    利用樹莓派的串口連接各類感測器(如:溫濕度感測器、光照感測器、煙霧感測器等)進行物聯網開發

1.3 ARM簡介

在學習任何嵌入式開發之前,最先要瞭解的就是嵌入式終端的CPU架構。

樹莓派是典型的嵌入式開發板,其CPU架構自然是ARM,先來看下樹莓派3B+的硬體配置:

博通BCM2837B0 SoC,集成四核ARM Cortex-A53(ARMv8)64位@ 1.4GHz CPU,集成博通 Videocore-IV GPU

記憶體:1GB LPDDR2 SDRAM

有線網路:千兆乙太網(通過USB2.0通道,最大吞吐量 300Mbps)

無線網路:2.4GHz和5GHz 雙頻Wi-Fi,支持802.11b/g/n/ac

藍牙:藍牙4.2&低功耗藍牙(BLE)

存儲:Micro-SD

其他介面:HDMI,3.5mm模擬音頻視頻插孔,4x USB 2.0,乙太網,攝像機串列介面(CSI),
顯示器串列介面(DSI),MicroSD卡座,40pin擴展雙排插針

尺寸:82mmx 56mmx 19.5mm,50克

ARM概念

ARM首先是一個公司,這家公司設計CPU並向各個CPU製造商授權許可,所以ARM公司是一家CPU設計公司。同時,ARM也是ARM公司主導設計的CPU系列的簡稱。

ARM版本區分

ARM版本號可以分為三類:

· 內核版本號,例如ARMv5,ARMv7,ARMv7a,ARMv8a...

· Soc版本號,例如Cortex-A8,Cortex-A9...

· 晶元型號,例如2410,2440,6410,S5PV210...

CPU設計原理和匯流排

CPU主要包括運算器,控制器,存儲器通過匯流排與Flash與記憶體連接。

匯流排就類似於CPU中的道路,數據通過匯流排在CPU和外設之間傳輸,CPU也通過內部匯流排與SOC中的其他外設連接,例如UART設備,內部匯流排由於在晶元內部,
抗干擾能力強,運算速度更快。

匯流排分為兩種,地址匯流排和數據匯流排:

地址匯流排用於傳輸地址,CPU通過地址匯流排定址,告訴設備要取的數據在哪個地址中,地址匯流排的位數決定了定址範圍

數據匯流排用於傳輸數據,CPU通過數據匯流排與外部交換信息,將設備要的數據通過該匯流排發送給對方,數據匯流排的位數決定了CPU單次通信能交換的信息數量

匯流排的速度決定了CPU和外設互換信息的速度

CPU的地址匯流排和數據匯流排的位數可以不同,CPU的位數就指的是數據匯流排的位數

32位CPU的定址範圍是4G所以最多支持4G記憶體,數據匯流排是32位的,那麼傳輸一個int和傳輸一個char的效率是一樣的。

在64位系統下運行32位軟體,唯一的差別就是32位軟體仍然是32定址機制,所以只有64位系統才能原生支持超過4G記憶體的定址。

樹莓派3B+使用的CPU為四核ARM Cortex-A53(ARMv8)64位,通過上文我們瞭解到32位的定址空間有限,並不能真正發揮64位CPU的性能,有實驗證明,64位CPU的樹莓派比32位的效率提高近30倍。

支持ARM的系統

瞭解了樹莓派的CPU,再來說下支持樹莓派的系統,目前支持樹莓派的系統有以下幾種:

Raspbain Stretch        樹莓派官方操作系統(圖形界面版)
Raspbain Stretch Lite   樹莓派官方操作系統(命令行版)
Ubuntu Mate             Ubuntu標準系統(圖形界面版)
......
Ubuntu Server           Ubuntu伺服器系統
Windows 10 IoT Core     Windows 10的物聯網核心系統
CentOS-armhfp           Centos arm32位版
CentOS-AArch64          Centos arm64位版

說明:Centos系統官方只提供32位版本的img鏡像下載,64位版系統提供.iso的鏡像下載,樹莓派無法燒錄.iso鏡像
Centos從ARMv8開始使用AArch術語表示,AArch是ARMv8的官方Linux體繫結構名稱
詳見官方說明:https://seven.centos.org/2015/03/building-centos-linux-7-for-armv8/
官方鏡像地址32位:http://mirror.centos.org/altarch/7/isos/armhfp/
官方鏡像地址64位:http://mirror.centos.org/altarch/7/isos/aarch64/

更多系統,詳見 http://rpifans.cn/pages/imgdown/index.html

二、材料清單

樹莓派3B+(2.5V電源 + USB線)x 1 約230-250元

閃迪TF卡(64G)x 1 約80-100元

TF卡讀卡器 x 1 約10元

材料總價約300元

三、燒錄系統

鏡像文件

樹莓派的鏡像文件為.img,下載的操作系統鏡像為.img文件或raw.xz文件
本文使用CentOS for AArch64作為樹莓派的操作系統,由於Centos官方未提供64位的img鏡像下載,所以本文采用移植版的CentOS for AArch64
鏡像下載地址:https://github.com/chainsx/centos64-rpi

使用工具

SDFormatter:TF卡格式化工具,用於格式化TF卡
下載地址:https://www.sdcard.org/chs/downloads/formatter_4/eula_windows/index.html

Win32DiskImager:鏡像燒錄工具,用於燒錄img鏡像
下載地址:https://sourceforge.net/projects/win32diskimager/

putty:SSH連接工具,用於ssh連接樹莓派
下載地址:https://www.chiark.greenend.org.uk/~sgtatham/putty/

四、基礎配置

4.1 擴展磁碟分區

系統燒錄完成之後的系統分區為根分區+Linux分區,也就是TF卡的磁碟大小僅為系統鏡像的大小,很顯然這是不能接受的,我們要對磁碟進行重新分區,找回失去的磁碟空間

關於燒錄分區

img鏡像是一種可引導的分區文件,系統燒錄完成後,磁碟被分為兩個區。
一個是FAT16可讀寫的根分區,用來存放鏡像引導文件和系統內核等文件。
一個是Linux的只讀分區,用來存放Linux文件系統。
重新分區的目的就是將只讀分區的剩餘空間擴展出來,最大化磁碟剩餘空間,用來存儲其他文件

查看磁碟大小

[root@localhost ~]# df -h

進入分區工具

[root@localhost ~]# fdisk /dev/mmcblk0
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

磁碟分區

#刪除分區(命令:d)
Command (m for help): d

#選擇分區(刪除預設分區)
Partition number (1,2, default 2): 輸入2或直接回車

#列出分區表(命令:p)
Command (m for help): p
Device Boot             Start         End       Blocks   Id  System
/dev/mmcblk0p1   *        2048      131072       64512+   e  W95 FAT16 (LBA)

#新建分區(命令:n)
Command (m for help): n

#選擇分區類型(選擇預設類型,輸入p)
Select (default p): p

#選擇分區(選擇預設分區)
Partition number (2-4, default 2): 輸入2或回車

#選擇第二分區起始位置(使用預設)
First sector (131073-124735487, default 133120): 回車

#選擇第二分區結束位置(使用預設)
Last sector, +sectors or +size{K,M,G} (133120-124735487, default 124735487): 回車

#列出分區表(命令:p)
Command (m for help): p
 Device Boot            Start         End       Blocks   Id  System
/dev/mmcblk0p1   *        2048      131072       64512+   e  W95 FAT16 (LBA)
/dev/mmcblk0p2          133120   124735487    62301184   83  Linux

#把分區寫進分區表,保存並退出(命令:w)
Command (m for help): w

重啟系統

[root@localhost ~]# reboot

重啟後調整分區大小(重要步驟!!!)

#要調整的分區為第二分區
[root@localhost ~]# resize2fs /dev/mmcblk0p2

查看磁碟大小

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        59G  2.3G   54G   5% /
devtmpfs        454M     0  454M   0% /dev
tmpfs           459M     0  459M   0% /dev/shm
tmpfs           459M   12M  448M   3% /run
tmpfs           459M     0  459M   0% /sys/fs/cgroup
/dev/mmcblk0p1   63M   63M  2.0K 100% /boot
tmpfs            92M     0   92M   0% /run/user/0

4.2 升級系統內核

由於移植版本的系統內核未提供無線網路、藍牙等擴展功能的驅動,所以需要升級系統內核,否則無法開啟樹莓派的無線網卡

查看內核版本

#查看內核版本
[root@localhost ~]# cat /proc/version
Linux version 4.13.16-chainsx-edition-CX-v5 (root@ubuntu) (gcc version 5.4.0 20160609 
(Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.6)) #1 SMP PREEMPT Tue Feb 20 18:45:58 CST 2018

配置hosts

#編輯hosts
[root@localhost ~]# vi /etc/hosts
#輸入以下內容(或參考 常見問題及解決 使用DNS檢測網站檢測最新的IP)
192.30.253.112 github.com
151.101.113.194 github.global.ssl.fastly.net

克隆項目

#從git克隆項目
[root@localhost ~]# git clone https://github.com/chainsx/firmware64-rpi
Cloning into 'firmware64-rpi'...
remote: Counting objects: 2928, done.
remote: Total 2928 (delta 0), reused 0 (delta 0), pack-reused 2928
Receiving objects: 100% (2928/2928), 65.13 MiB | 2.82 MiB/s, done.
Resolving deltas: 100% (517/517), done.
Checking out files: 100% (2895/2895), done.

進入目錄

[root@localhost ~]# cd /root/firmware64-rpi

安裝內核

[root@localhost ~]# cd install && sh install.sh
Install Image,dtbs
cp: cannot overwrite directory ‘/boot/overlays’ with non-directory
cp: error writing ‘/boot/vmlinuz-4.16.0-chainsx-edition-chainsx+v7’: No space left on device
Remove old modules
OK
Install modules
OK
Install firmware
OK
Install kernel_headers
OK
Configure files
#uncomment to overclock the arm. 700 MHz is the default.
arm_freq=700# NOOBS Auto-generated Settings:
hdmi_force_hotplug=1
config_hdmi_boost=4
overscan_left=24
overscan_right=24
overscan_top=16
overscan_bottom=16
disable_overscan=0
core_freq=250
sdram_freq=400
over_voltage=0
OK
You can reboot to use this new kernel.

重啟系統

[root@localhost ~]# reboot

查看內核版本

[root@localhost ~]# cat /proc/version
Linux version 4.16.0-chainsx-edition-chainsx+v7 (root@ubuntu) (gcc version 5.4.0 20160609 
(Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.6)) #3 SMP PREEMPT Thu Mar 22 02:32:13 CST 2018

4.3 更改系統語言

查看語言配置

[root@localhost ~]# cat /etc/locale.conf
LANG="en_US.UTF-8"

查看系統語言包

[root@localhost ~]# locale -a

修改語言配置

[root@localhost ~]# vi /etc/locale.conf
#更改為簡體中文
LANG="zh_CN.utf8"

重啟系統

[root@localhost ~]# reboot

查看語言配置

[root@localhost ~]# cat /etc/locale.conf
LANG="zh_CN.utf8"

4.4 配置無線網路

查看IP地址

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.104/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0
    valid_lft 6935sec preferred_lft 6935sec
    inet6 fe80::ba27:ebff:fee1:2a28/64 scope link
    valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

#註意:查看wlan0的狀態是否為UP,當前wlan0的狀態沒有UP,說明沒有開啟,執行下一條命令開啟wlan0

開啟wlan0

[root@localhost ~]# ip link set wlan0 up

查看IP地址

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.104/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0
    valid_lft 6912sec preferred_lft 6912sec
    inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link
    valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

#註意:查看wlan0的狀態是否為UP,當前wlan0的狀態為UP,說明已經開啟

安裝wifi管理工具

[root@localhost ~]# yum -y install NetworkManager-wifi

配置文件設置wifi

[root@localhost ~]# cd /etc/sysconfig/network-scripts

創建配置文件

#ifcfg-後面的名稱與下文NAME參數對應
[root@localhost ~]# vi ifcfg-taylor

#輸入內容如下:
HWADDR=xx:xx:xx:xx:xx:xx #無線網卡MAC地址(本例以x號代替,可以使用 ip addr 命令查看 wlan0 的MAC地址)
ESSID=xxxxxx #wifi名稱(無線網的名稱,本例以x號代替)
MODE=Managed
KEY_MGMT=WPA-PSK
SECURITYMODE=open
MAC_ADDRESS_RANDOMIZATION=default
TYPE=Wireless
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none #啟用靜態IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=taylor #網路連接的名稱
UUID=ff0af7a2-aac8-45b7-bf21-894d571c9b2a
ONBOOT=yes #開機自動啟動
IPADDR=192.168.0.110 #靜態IP
PREFIX=24 #子網掩碼24位
GATEWAY=192.168.0.1 #預設網關
DNS1=192.168.1.1 #DSN 1
DNS2=192.168.0.1 #DNS 2

創建密鑰文件

#keys-後面的名稱與上文NAME參數對應
[root@localhost ~]# vi keys-taylor

#輸入內容如下(本例以x號代替) WPA_PSK=xxxxxx #wifi密碼

重啟系統

[root@localhost ~]# reboot

#系統重啟後使用ip addr 命令查看wlan0是否正確分配ip,如果正確分配ip,此時可拔掉網線,斷開ssh連接。
使用靜態ip連接ssh,即使用wifi連接樹莓派

4.5 安裝基礎工具

安裝下載工具

[root@localhost ~]# yum -y install wget

安裝epel源

#下載(清華大學鏡像站地址)
[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm

#安裝
[root@localhost ~]# rpm -vih epel-release-latest-7.noarch.rpm

#查看
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# ls
CentOS-Base.repo         CentOS-CR.repo         CentOS-fasttrack.repo  CentOS-Sources.repo  epel.repo
CentOS-Base.repo.rpmnew  CentOS-Debuginfo.repo  CentOS-Media.repo      CentOS-Vault.repo    epel-testing.repo

#更新源
[root@localhost ~]# yum clean all && yum makecache

安裝開發工具包

[root@localhost ~]# yum groupinstall "Development Tools"

4.6 升級系統版本

查看系統版本

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (AltArch)

備份重要數據

備份過程略(或不備份直接升級)

運行yum命令升級

#清除yum緩存
[root@localhost ~]# yum clean all

#更新所有包
[root@localhost ~]# yum -y update

重啟系統

[root@localhost ~]# reboot

查看系統版本

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (AltArch)

4.7 設置系統時區

查看時區設置

[root@localhost ~]# timedatectl
      Local time: Sat 2018-07-07 13:51:00 UTC
  Universal time: Sat 2018-07-07 13:51:00 UTC
        RTC time: n/a
       Time zone: Etc/UTC (UTC, +0000)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
  DST active: n/a

設置時區

[root@localhost ~]# timedatectl set-timezone Asia/Shanghai

查看時區設置

[root@localhost ~]# timedatectl
    Local time: 日 2018-06-24 21:29:14 CST
Universal time: 日 2018-06-24 13:29:14 UTC
        RTC time: n/a
    Time zone: Asia/Shanghai (CST, +0800)
    NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
    DST active: n/a

4.8 修改系統密碼

修改root密碼(密碼輸入無任何回顯,摸黑輸入)

#若提示 無效的密碼: 密碼包含用戶名在某些地方 請忽略該提示,再次輸入密碼即可更改成功

#英文版
[root@localhost ~]# passwd root
Changing password for user root.
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.

#中文版
[root@localhost ~]# passwd root
更改用戶 root 的密碼 。
新的 密碼:
無效的密碼: 密碼包含用戶名在某些地方
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。

重啟系統

[root@localhost ~]# reboot

五、常見問題及解決

5.1 ifconfig命令無效

描述:輸入ifconfig命令後顯示 -bash: ifconfig: command not found 或 -bash: ifconfig: 未找到命令

原因:缺少net-tools包(net-tools包提供了ifconfig命令)

解決:安裝net-tools
    yum install net-tools
拓展:
    1、CentOS 7最小化系統,使用 ip addr 和 ip link 命令來查找網卡詳情,要知道統計數據,可以使用 ip -s link

    2、如果你不知道在哪裡可以找到ifconfig命令,請按照以下簡單的步驟來找到它。
        首先,讓我們找出哪個包提供了ifconfig命令。要完成這項任務,輸入以下命令:

        yum provides ifconfig

        或者你也可以使用以下命令

        yum whatprovides ifconfig

        “provides”或者“whatprovides”開關用於找出某個包提供了某些功能或文件

5.2 GitHub訪問/下載太慢

使用(站長工具-Dns檢測)
http://tool.chinaz.com/dns/ 
或(IP檢測網站)
https://www.ipaddress.com/

分別檢測
github.com
github.global.ssl.fastly.net-tools
codeload.github.com

寫入hosts(Windows):
C:\Windows\System32\drivers\etc\hosts

192.30.253.113 github.com
151.101.73.194 github.global.ssl.fastly.net

cmd 執行 ipconfig /flushdns 命令,刷新 DNS 緩存

寫入hosts(Linux):
vi /etc/hosts

192.30.253.112 github.com
151.101.113.194 github.global.ssl.fastly.net

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Visual Studio 2017移動開發 控制項介紹和使用方式:Numeric控制項 Smobiler開發平臺,.NET移動開發 一、 樣式一 我們要實現上圖中的效果,需要如下的操作: 設置控制項的背景色,預設設置為“White”,如圖1; 圖 1 若將該屬性設置為“128, 255, 255”,顯示 ...
  • 在WEBAPI中,AuthorizeAttribute類重寫時,如何獲取post數據是個難題,網上找資料也不好使,只能自己研究,通過研究發現,WEBAPI給了我們獲取POST數據的可能,下麵介紹一下: //將POST數據以字元串的形式讀取,例如post的json數據,就可以以這種方式讀取 actio ...
  • 日行千里,全憑“車”況,為什麼我們要升級平臺 歷經一個半月的時間,不管是叫工業互聯網平臺還是叫工業大數據平臺,從1.0版本升級到2.0版本,升級部分包括:客戶端(網關)、服務端(數據接收、數據處理、計算服務)、底層資料庫結構、WEB業務系統、WEB API介面和手機APP(Android和IOS)等 ...
  • mvc傳值的三種方式:1.ViewData 在使用過程中需要類型轉換 例子: ViewData["MyTitle"]="ViewData傳值"; 引用: @ViewData["MyTitle"] 例子: List<string> strs=new List<string>{"China","Appl ...
  • 通用的單例窗體製作類 ...
  • 最近在做 MVC 項目的時候遇到項目的導出,下麵總結下兩種導出到excel 的方法 第一種方法: 將文件寫到本地,然後返回這個File 或者返回這個 File 的絕對地址 其中 _hostingEnvironment 可以在全局讀取的配置文件的工具類 Globals 中配置 直接上代碼: 第二種方法 ...
  • espcomm_send_command: didn't receive command response espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed 我現在有兩塊板子都存在這樣的問題,我嘗試這解決這個問題已經很久了。國內文章根本沒有類似的問題 ...
  • devfs(設備文件系統)是由Linux2.4內核引入的,它的出現主要使得設備驅動程式能夠自主管理自己的設備文件。具體來說,devfs具有如下優點: 可以通過程式在設備初始化時在/dev目錄下創建設備文件,卸載設備時將它刪除。 設備驅動程式可以指定設備名、所有者和許可權位,用戶空間程式仍可以修改所有者 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...