[Docker实战] 旭日X3派上Docker Openwrt +Samba 实现局域网NAS 开启AP模式

Why Do I Need Docker, and How Do I Use It? | Hexlet Guides

🌈 博客个人主页Chris在Coding

🎥 本文所属专栏:[旭日X3派]    [Docker实战]

❤️ 前置学习专栏:[Linux学习]

⏰ 我们仍在旅途                                                                                   

目录

        1. 安装系统

        1.1 烧录准备

        1.2 烧录系统

        1.3 启动系统

        2. 远程登录

        2.1 网络连接

        2.2 开启vino服务

        2.3 VNC登录

        2.4 SSH连接--VsCode

                2.4.1.安装VsCode及插件

                2.4.2.添加服务器连接配置 

        3. 安装Docker OpenWrt

        3.1 安装Docker

                3.1.1 官方脚本一键安装

                3.1.2 ARM架构静态安装包部署Docker

                3.1.3 创建并加入docker组 

        3.2 安装Docker Portainer

        3.3 安装Docker Openwrt

        4. Samba局域网NAS

        4.1 创建共享目录

        4.2 Samba参数设置

        4.3 挂载点设置

        4.4 设置samba密码

        4.5 远程访问

        5. Soft AP模式


        1. 安装系统

旭日X3派开发板支持两个系统版本:Ubuntu 20.04 Desktop 和 Ubuntu 20.04 Server

  • Ubuntu Desktop:版本支持图形化桌面
  • Ubuntu Server:版本使用不带图形化桌面的命令行交互操作方式

这里我们安装Ubuntu Desktop版本

开发板Ubuntu镜像文件可从资源中心栏目中获取,如下图:

1.1 烧录准备

在烧录Ubuntu系统镜像前,用户需要做如下准备:

  • 准备至少8GB容量的Micro SD卡

  • SD 读卡器

  • 下载Ubuntu镜像压缩包,并解压出Ubuntu系统镜像文件:system_sdcard.img​

  • 下载镜像烧录工具balenaEtcher,下载链接:https://www.balena.io/etcher/

1.2 烧录系统

balenaEtcher是一款支持Windows/Mac/Linux等多平台的PC端启动盘制作工具,制作SD启动卡流程如下:

打开balenaEtcher工具,点击Flash frome file按钮,选择解压出来的system_sdcard.img文件作为烧录镜像

点击Select target按钮,选择对应的Micro SD存储卡作为目标存储设备

点击Flash按钮开始烧录,待工具提示Flash Complete时,表示镜像烧录完成,您可以关闭balenaEtcher工具并取出存储卡 

1.3 启动系统

首先保持旭日X3派开发板断电,然后将制作好的存储卡插入开发板的Micro SD卡槽,并通过HDMI线缆连接开发板与显示器,最后给开发板上电。用户可通过指示灯判断开发板状态,指示灯说明如下:

  • 红色指示灯:点亮代表硬件上电正常

  • 绿色指示灯:点亮代表系统启动中,熄灭代表系统启动完成

系统首次启动时会进行默认环境配置,整个过程持续45秒左右,配置结束后会在显示器输出Ubuntu系统桌面(Ubuntu Server显示logo图标)。

如果开发板上电后长时间没有显示输出(2分钟以上),说明开发板启动异常。此时用户可通过指示灯确认系统状态,方法如下:

  • 绿灯常亮:说明系统启动失败,可检查使用的电源适配器是否满足5V3A的要求,可尝试重新制作Micro SD卡系统镜像

  • 绿灯熄灭:说明系统启动成功,但显示服务启动失败,请确认连接的显示器符合支持列表规格

        2. 远程登录

注意:

本章节的操作,我是先将开发板接到独立的显示器并连接键鼠进行的,完成远程登陆的任务后,才能实现跨设备开发

远程连接需要保证设备与开发板处于同一个局域网内 ,这里我事先准备好了一个笔记本,准备与开发板连接到同一个WiFi下进行远程连接

2.1 网络连接

安装了Ubuntu 20.04 Desktop版本的开发板开机后会进入图形化桌面,直接点击右上角

(安装Ubuntu Server版本系统的用户,可通过命令行完成无线网络配置,这里就不再赘述)

查看开发板当前IP地址

使用下面这个命令可以查看当前设备的ip地址

ifconfig

我们主要看wlan0口的inet下的ip地址,这里我的地址是192.168.31.77

开发板有线网络默认采用静态IP配置,连接后同一路由器下的IP地址不会改变

2.2 开启vino服务

vino 是linux上一个用于远程桌面连接的VNC 服务端。这时如果我们直接打开VNC连接,是连不上的,主要原因是开发板是没有安装Vino服务的

我们需要自己去安装Vino服务

我们使用的地平线镜像中软件包是旧的,我们首先先更新软件包以及对应的软件:

1.按顺序执行下面两条命令

 更新软件源列表,以获取最新的软件包信息

sudo apt update

 用于安装已经在软件源中更新的软件包,使系统中的软件保持最新状态。 

sudo apt upgrade

(该过程需要保证网络的通畅,建议连接稳定的网络,整个过程可能花费10分钟左右,请耐心等待)

2.更新完后我们执行下面这条命令来安装vino

sudo apt install -y vino

3.再通过systemctl 命令启动: 

systemctl --user restart vino-server.service  # 启动 vino 服务

 4.查看vino状态:

systemctl --user status

 此时则代表vino服务运行

2.3 VNC登录

VNC Viewer是一个图形桌面共享软件,可在电脑上实现设备远程登录和控制桌面。该软件可以通过电脑显示器预览开发板系统桌面,并使用电脑的鼠标、键盘进行远程操作。用户通过VNC Viewer操作,可以获得跟开发板本地操作相同的效果,下载链接VNC Viewer。

目前VNC支持直接、云端两种连接方式,我们使用直接连接方式,连接步骤如下:

1.上方输入设备ip地址,这里我自己是:192.168.31.77

2.输入完后回车连接时可能会弹出如下面的窗口 

之所以出现这种问题是因为,远程连接Ubuntu桌面,Vino需将安全认证关闭才能通过VNC Viewer连接。

3.这时我们可以通过以下命令可以关闭安全认证方式:

sudo gsettings set org.gnome.Vino prompt-enabled false

4.输入该命令后,系统可能会继续报错

failed to commit changes to dconf: Failed to execute child process “dbus-launch” (No such file or directory)

不要急,这说明我们的系统中缺少需要的包

sudo apt-get install dbus-x11 -y

5.安装好后再次执行关闭安全认证命令,没有再报错后,我们重启vino服务

systemctl --user restart vino-server.service  # 启动 vino 服务

6.这个时候我们再去使用VNC Viewer连接,如果再弹出相同错误的弹窗,可能是重启Vino出了问题(我在实际操作中用地平线官方镜像时遇到了!)

这个时候我们只需要用万能的关机重启大法就好了

2.4 SSH连接--VsCode

通过VNC我们确实可以做到远程连接开发板桌面了,但是实际上开发依然十分低效,我这里十分推荐在VNC的基础上再用VsCode进行SSH连接

2.4.1.安装VsCode及插件

Visual Stdio Code简称VS Code,是一款跨平台的、免费且开源的现代轻量级代码编辑器,支持几乎 主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性,也拥有对git的开箱即用的支持。同时,它还支持插件扩展,通过丰富的插件,用户能获得更多高效的功能.

vsCode官网下载

下载安装后我们还需要安装远程连接的插件Remote - SSH

除此之外我还推荐安装以下的插件

  • Chinese (Simplified) 
  • vscode-icons 
  • C/C++ Extension Pack
  • GBKtoUTF8 

2.4.2.添加服务器连接配置 

  • 我们先点击左边多出来的远程资源管理器
  • 再点击左上角的+号新建远程
  • 然后在弹出来的方框中输入命令,这里我输入的是ssh sunrise@192.168.31.77,其中ssh和@是固定语法不能更改,sunrise是对应的用户名字(地平线官方镜像默认sunrise),192.168.31.77是自己开发板的IP地址

这是将连接的信息文件保存

我们在SSH栏中找到我们需要连接的对应服务器,点击旁边的两个图标任一都可以

之后输入对应用户的密码即可,我用的地平线官方镜像用户名与密码都默认是sunrise

成功进入后,我们后面就可以通过VsCode来实现编程开发

我们再按下CTRL+`就可以进入命令行终端,这样开发就更方便了

        3. 安装Docker OpenWrt

3.1 安装Docker

安装docker这里有两种方案,分别是手动静态软件包安装还有官方脚本部署

这里更推荐后者:官方脚本部署,特点:简单,快捷

当然我也会详细写出怎么手动安装的方案,喜欢折腾的朋友也可以参考学习一下

3.1.1 官方脚本一键安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

3.1.2 ARM架构静态安装包部署Docker

由于我使用的旭日X3派是ARM架构,这使得我们跟着官方的步骤走,也会报出很多莫名奇妙的错误,

所以这里我们采用了静态安装包部署Docker的办法(不是ARM架构的朋友跟着官方或者别人的博客走都问题不大,这里我就不再赘述)

1.下载Docker静态包

Docker静态安装包的下载地址为:Index of linux/static/stable/aarch64/

这里我直接在我板子上的FireFox浏览器上打开下载

这里我直接选择下载我当前的最新版本docker-25.0.3

2.解压Docker静态包

文件是默认下载到路径 /home/用户名/Downloads/

我们先进入下载目录

cd /home/sunrise/Downloads/

解压并移动到/usr/bin/目录 

tar xvf docker-20.10.24.tgz
cp docker/* /usr/bin/

3 将docker注册为service

用vim创建并编辑docker.service

sudo vim /etc/systemd/system/docker.service

进入后我们单击 i ,进入插入模式

再复制粘贴下面内容到文件

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --selinux-enabled=false -H unix://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

复制粘贴完后我们先按ESC进入普通模式

再单击进入命令模式,输入wq后再回车,就写入并保存

 4 启动docker

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

3.1.3 创建并加入docker组 

在安装成功并运行好后,我们在使用docker命令时,会遇到如下报错

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get

报错称是权限问题,这时候得加上sudo才行.我们可以通过加入docker组的方法解决权限问题

静态安装包安装是不会给你创建docker的group的,所以我们需要自己创建一个

sudo groupadd docker

然后再执行添加用户操作就可以成功了,最后重启docker 

sudo usermod -aG docker ${USER}
sudo systemctl restart docker

restart后仍出现相同问题的,可能是重启容器环节有纰漏,推荐关机重启大法

3.2 安装Docker Portainer

portainer是一款容器管理可视化界面,不想在虚拟中使用命令管理容器的小伙伴,可以选择安装portainer对容器进行管理,查看日志、启动、停止容器等非常方便。

1.拉取并启动镜像

docker run -d --network host -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

2.使用Docker Portainer


这时候我们只需要输入在浏览器中输入 开发板IP:9000 就可以访问

3.3 安装Docker Openwrt

OpenWrt是一款开源的嵌入式操作系统,专门设计用于智能路由器和网络设备。它基于Linux内核,提供了丰富的功能和灵活的定制化选项,成为开发智能路由器的强大工具。

Github地址 这里包含了很全的镜像文件包含了 arm  x86  x64 的 docker 镜像文件,我的机器是旭日X3派 所以只能安装这个镜像 sulinggg/openwrt:latest 。其他机器请去链接自行下载

1.拉取并启动镜像

docker run -d --restart always --name openwrt --privileged --network host  sulinggg/openwrt:armv8 /sbin/init

2.使用Docker Openwrt

这时候我们只需要输入在浏览器中输入 开发板IP 就可以了

默认密码是 password

        4. Samba局域网NAS

如果是安装的我前面提到的Docker Openwrt,里面是已经集成了Samba,我们不需要格外安装

4.1 创建共享目录

我们可以使用Portainer连接openwrt容器的界面,进入界面后我们先创建好共享目录

mkdir -p /home/share

设置权限 

chmod 777 /home/share

4.2 Samba参数设置

我们先来到可视化界面中的NAS栏中的网络共享,目录就写前面创建的共享目录,用户我们这里就写root

来到编辑模板一栏,把bind interfaces only = yesinvalid users = root两栏注释掉(在行前面加#)

修改完后保存

4.3 挂载点设置

勾选启用挂载点,再把挂载点设置成共享目录

4.4 设置samba密码

我们在回到Portainer连接openwrt容器的界面

smbpasswd -a root

我们为root用户设置专门的samba服务密码,设置完后我们重启samba服务

 service samba restart

4.5 远程访问

我们按下Win+R组合键打开运行,输入\\:开发板IP地址后回车

用户输入我们的root用户,再输入好我们前面设置的samba密码

这时后,成功访问共享文件,并创建新的文件夹

        5. Soft AP模式

这章的代码内容都是直接用的官方文档,我这里主要说一下思路

  • 由于我们使用的docker openwrt里面是没有集成热点模块的,想要在docker openwrt上开启AP模式就无从谈起了.我也试了几个不同的docker镜像,里面只有一个x86架构的支持,但旭日X3派是arm架构.
  • 想要加入热点模块,我们就只能在宿主机上的Ubuntu系统动刀,后面也是在下面几个大神的博客中才得到启发:

斐讯 N1 部署 Docker 和 OpenWRT,并利用 Hostapd 开启 Wi-Fi 热点 · Oaker's Blog

利用hostapd启动ac 5G无线AP

[N1盒子] 【原创】Docker内OpenWRT设置成主路由,为WiFi接入的客户提供源自有线网口的网络服务

  • 说来也是好笑,在实操的过程中报错频出不断,差点要放弃时,最后才发现地平线官方已经给出了开启AP模式的办法,也是希望各位朋友不要像我这样踩坑.

开发板无线网络默认运行在Station模式下,如需使用Soft AP模式,请按照以下步骤进行配置。

1.安装hostapd 和 isc-dhcp-server

sudo apt update
sudo apt install hostapd
sudo apt install isc-dhcp-server

2.运行 sudo vim /etc/hostapd.conf命令来配置hostapd.conf,主要关注下面几个字段:

interface=wlan0 #作为AP热点的网卡
ssid=Sunrise #WiFi名字
wpa=2 #0为WPA 2为WPA2 一般为2
wpa_key_mgmt=WPA-PSK #加密算法 一般为WPA-PSK
wpa_passphrase=12345678 #密码
wpa_pairwise=CCMP #加密协议,一般为CCMP
  • 无密码的热点配置,请在hostapd.conf文件添加以下内容:

interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=Sunrise
channel=6
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0
  • 有密码的热点配置,请在hostapd.conf文件添加以下内容:

interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=Sunrise
channel=6
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=12345678

3.配置isc-dhcp-server文件,步骤如下:

  • 执行 sudo vim /etc/default/isc-dhcp-server修改isc-dhcp-server文件,添加如下定义的网络接口:
INTERFACESv4="wlan0"
  • 执行 sudo vim /etc/dhcp/dhcpd.conf修改dhcpd.conf文件, 取消以下字段的注释
  authoritative;
  • 然后在 /etc/dhcp/dhcpd.conf文件末尾增加以下配置:
 subnet 10.5.5.0 netmask 255.255.255.0 { #网段和子网掩码
  range 10.5.5.100 10.5.5.254;#可获取的IP范围
  option subnet-mask 255.255.255.0; #子网掩码
  option routers 10.5.5.1;#默认网关
  option broadcast-address 10.5.5.31;#广播地址
  default-lease-time 600;#默认租约期限,单位秒
  max-lease-time 7200;#最长租约期限,单位秒
}

4.停止 wpa_supplicant 服务,并重启 wlan0

systemctl stop wpa_supplicant

ip addr flush dev wlan0
sleep 0.5
ifconfig wlan0 down
sleep 1
ifconfig wlan0 up

5.按如下步骤启动 hostapd服务

  • 执行sudo hostapd -B /etc/hostapd.conf命令
 root@ubuntu:~# sudo hostapd -B /etc/hostapd.conf

 Configuration file: /etc/hostapd.conf
 Using interface wlan0 with hwaddr 08:e9:f6:af:18:26 and ssid "sunrise"
 wlan0: interface state UNINITIALIZED->ENABLED
 wlan0: AP-ENABLED
  • 通过ifconfig命令,配置无线接口wlan0的IP和网段,注意要跟第三步的配置保持一致
sudo ifconfig wlan0 10.5.5.1 netmask 255.255.255.0
  • 最后开启dhcp服务器,连上热点会从10.5.5.100到10.5.5.255之间分配一个ip地址给客户端
sudo ifconfig wlan0 10.5.5.1 netmask 255.255.255.0
sudo systemctl start isc-dhcp-server
sudo systemctl enable isc-dhcp-server

6.连接开发板热点,例如 sunrise

7.如需切换回Station模式,可按如下方式进行:

# 停止 hostapd
killall5 -9 hostapd

# 清除 wlan0 的地址
ip addr flush dev wlan0
sleep 0.5
ifconfig wlan0 down
sleep 1
ifconfig wlan0 up

# 重启 wpa_supplicant
systemctl restart wpa_supplicant

# 连接热点,,具体操作可以查看上一章节 “无线网络”
wifi_connect "WiFi-Test" "12345678"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/393613.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】类与对象【定义、访问限定符、this指针】

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:http://t.csdnimg.cn/eCa5z 目录 面向过程和面向对象初步认识 类的引入 类的定义 成员变量命名规则的建议: 类的访问限定符及…

Java面试第一站:计算机网络基础知识

该系列会持续更新,关注我,第一时间获取我的最新动态哟 Java面试中,经常会问到跟计算机网络知识相关的考点,有的小伙伴不是很明白。考察网络知识有什么意义? 因为编程的时候,多数的情况下是不用我们来编写 …

单主模式和多主模式切换

1 组复制模式切换注意点 组复制有两种运行模式,一种是单主模式,一种是多主模式。这个模式是在整个组中设置的,由 group_replication_single_primary_mode 这个系统变量指定,而且在所有成员上必须保持一致。ON 表示单主模式&#…

OpenAI Sora视频生成机制:时空补丁

AI如何将静态图像转化为动态、逼真的视频?OpenAI 的 Sora 通过时空补丁(spacetime patches)的创新使用给出了答案。 独特的视频生成方法 在生成模型的世界中,我们看到了从 GAN 到自回归和扩散模型的许多方法,它们都有…

基于结点电压法的配电网状态估计算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 结点电压法的基本原理 4.2 结点电压法在配电网状态估计中的应用 5.完整程序 1.程序功能描述 基于结点电压法的配电网状态估计算法.对配电网实施有效控制和操作的前提是实时数据库中数据…

在职阿里6年,一个28岁女软件测试工程师的心声

简单的先说一下,坐标杭州,16届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) 其中成功的有4家&am…

Swift 5.9 新 @Observable 对象在 SwiftUI 使用中的陷阱与解决

概览 在 Swift 5.9 中,苹果为我们带来了全新的可观察框架 Observation,它是观察者开发模式在 Swift 中的一个全新实现。 除了自身本领过硬以外,Observation 框架和 SwiftUI 搭配起来也能相得益彰,事倍功半。不过 Observable 对象…

10M上下文,仅靠提示就掌握一门语言,Google Gemini 1.5被OpenAI抢头条是真冤

这两天,几乎整个AI圈的目光都被OpenAI发布Sora模型的新闻吸引了去。其实还有件事也值得关注,那就是Google继上周官宣Gemini 1.0 Ultra 后,火速推出下一代人工智能模型Gemini 1.5。 公司首席执行官 Sundar Pichai携首席科学家Jeff Dean等众高…

在网络死磕5-10年的人,最后都怎么样了?

你们好,我是老杨。 此时此刻,如果你仍然在一家公司坚强的干着活,你已经打败了80%的职场朋友了。 现如今,从一毕业就做同一个行业超过5年的人,已经少之又少,更别说同一家公司干超过五年了。 这对别的行业…

redis 值中文显示乱码

问题: 解决办法: exit退出 进入时添加 --raw参数

【C++初阶】新手值得一做vector的oj题

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

解决updatexml和extractvalue查询显示不全

报错注入是一种常见的SQL 注入方式,通过注入代码,触发数据库的错误响应,并从错误信息中获取有用的信息。 updatexml和extractvalue updatexml和extractvalue 是常用的两个报错注入函数 http://localhost/sqli/Less-5/?id1%27and%20updat…

解锁Spring Boot中的设计模式—04.桥接模式:探索【桥接模式】的奥秘与应用实践!

桥接模式 桥接模式也称为桥梁模式、接口模式或者柄体(Handle and Body)模式,是将抽象部分与他的具体实现部分分离,使它们都可以独立地变化,通过组合的方式建立两个类之间的联系,而不是继承。 桥接模式是一种…

代码随想录刷题笔记 DAY 29 | 非递减子序列 No.491 | 全排列 No.46 | 全排列 II No. 47

文章目录 Day 2901. 非递减子序列(No. 491)1.1 题目1.2 笔记1.3 代码 02. 全排列(No. 46)2.1 题目2.2 笔记2.3 代码 03. 全排列 II(No. 47)3.1 题目3.2 笔记3.3 代码 Day 29 01. 非递减子序列(…

数据结构——单链表专题

目录 1. 链表的概念及结构2. 实现单链表初始化尾插头插尾删头删查找在指定位置之前插入数据在指定位置之后插入数据删除指定位之前的节点删除指定位置之后pos节点销毁链表 3. 完整代码test.cSList.h 4. 链表的分类 1. 链表的概念及结构 在顺序表中存在一定的问题: …

15.一种坍缩式的简单——组合模式详解

当曾经的孩子们慢慢步入社会才知道,那年味渐淡的春节就像是疾驰在人生路上的暂停键。 它允许你在隆隆的鞭炮声中静下心来,瞻前顾后,怅然若失。 也允许你在寂静的街道上屏气凝神,倾听自己胸腔里的那团人声鼎沸。 孩子们会明白的&am…

库的操作【数据库】

目录 一、创建数据库 二、删除数据库 ​编辑 三、数据库编码问题 四、库的改查 查 1)查有哪些数据库: 2)使用某个数据库: 3)当前在哪个数据库: 4)有谁在使用 改alter 五、备份和恢复 …

Shiro-02-shiro 是什么?

序言 大家好,我是老马。 前面我们学习了 5 分钟入门 shiro 安全框架实战笔记,让大家对 shiro 有了一个最基本的认识。 shiro 还有其他优秀的特性,今天我们就一起来学习一下,为后续深入学习奠定基础。 Apache Shiro 是什么&…

2.18通过字符设备驱动分步注册过程实现LED驱动的编写,编写应用程序测试

应用程序&#xff1a; #include<stdlib.h> #include<stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<unistd.h> #include<string.h> #include<sys/ioctl.h> #include"myled.h&quo…

LabVIEW智能家居控制系统

LabVIEW智能家居控制系统 介绍了一个基于LabVIEW的智能家居控制系统的开发过程。该系统利用LabVIEW软件与硬件设备相结合&#xff0c;通过无线网络技术实现家居环境的实时监控与控制&#xff0c;提升居住舒适度和能源使用效率。 项目背景&#xff1a;随着科技的发展和生活水平…