嵌入式linux-系统移植,搭建嵌入式Linux开发环境,嵌入式Linux内核结构,Android系统结构,开发板启动流程,安装TFTP,安装NFS,制作SD卡,并从SD卡启动,fastboot烧写

本文主要是介绍嵌入式linux-系统移植,搭建嵌入式Linux开发环境,嵌入式Linux内核结构,Android系统结构,开发板启动流程,安装TFTP,安装NFS,制作SD卡,并从SD卡启动,fastboot烧写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1,通用嵌入式系统软件组成部分
  • 2,嵌入式Linux内核结构
  • 3,Android系统
  • 4,开发板启动流程
  • 5,搭建嵌入式Linux开发环境的主要工作
  • 6,ubuntu环境
    • 6.1,交叉编译工具链安装
    • 6.2,安装TFTP
      • 6.2.1,TFTP介绍
      • 6.2.2,主机端tftp服务器配置
    • 6.3,安装主机端NFS
  • 7,制作SD卡,并从SD卡启动 (使用的是2010版本u-boot,支持fastboot烧写的)
    • 7.2,fastboot烧写
  • 8,目标机搭建
    • 8.1,PING通Ubuntu和目标机(开发板)
      • 8.1.1,确认板子和电脑是能通信的
        • 8.1.1.1,windows10系统默认是ping不通的,需要在防火墙中设置
        • 8.1.1.2,电脑用的无线,开发板用网线连电脑,开发板能ping同有线网卡,ping不通无线网卡。ububtu能ping通无线网卡,ping不通有线网卡
      • 8.1.2,确认电脑和虚拟机时能通信
      • 8.1.3,确认板子能和虚拟机能通讯
    • 8.2,网络自动 tftp 加载内核,并挂载nfs rootfs 启动
      • 8.2.1 开发板启动流程

1,通用嵌入式系统软件组成部分

无os嵌入式系统组成图
有os嵌入式系统组成图
  1. 应用访问内核要通过系统调用
  2. 内核访问硬件要通过映射

2,嵌入式Linux内核结构

在这里插入图片描述

3,Android系统

在这里插入图片描述

4,开发板启动流程

在这里插入图片描述

  1. 在BootLoader阶段,会有一个3,2,1倒计时
  2. 计时结束之前敲键盘就会干预开发板启动,此时就进行一些交互命令
  3. 不干预,开发板就回去加载内核

5,搭建嵌入式Linux开发环境的主要工作

准备开发主机、目标机(开发板)以及二者的连接介质
准备目标机代码
安装交叉工具链
开发主机上安装的软件(为方便调试)
终端软件(putty、minicom)
tftp服务(传文件)
nfs服务(同步)
目标机安装(u-boot烧写调试)
SD卡方式
Fastboot方式 (成功后,板子有串口信息输出)
主机和目标机能联通
网络自动 tftp 加载内核,并挂载nfs rootfs 启动

6,ubuntu环境

在这里插入图片描述

6.1,交叉编译工具链安装

https://blog.csdn.net/m0_37542524/article/details/85650128

6.2,安装TFTP

6.2.1,TFTP介绍

  1. 使用条件是:
    需要网络连接
    主机端需要安装 tftp 服务器软件
    目标机需要实现tftp客户端(实际上目标机不需要再次安装tftp客户端,bootloader中带了TFTP功能)
  2. 优点:
    传输速度快
    可以将编译好的内核下载到目标机,提高开发效率
    tftp 是用来下载远程文件的最简单网络协议,它基于udp协议而实现。嵌入式 linux 的 tftp 开发环境包括两个方面:
    一是 linux 开发主机端的 tftp-server 支持,
    二是嵌入式目标系统的 tftp-client 支持。

6.2.2,主机端tftp服务器配置

1、检查是否安装tftp server
$dpkg -s tftpd-hpa
如果未安装,安装 tftp-server
$apt-get install tftpd-hpa tftp-hpa

linux@linux:~$ dpkg -s tftpd-hpa
dpkg-query: package 'tftpd-hpa' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.
linux@linux:~$ apt-get install tftpd-hpa tftp-hpa
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
linux@linux:~$ sudo apt-get install tftpd-hpa tftp-hpa
[sudo] password for linux: 
。
。
。
。

2、修改文件vim /etc/default/tftpd-hpa,开启tftp服务
sudo vi /etc/default/tftpd-hpa
TFTP_USERNAME=“tftp”
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS=“0.0.0.0:69”
TFTP_OPTIONS="-c -s -l"

# /etc/default/tftpd-hpaTFTP_USERNAME="tftp"
#TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

3、创建tftpboot目录,启动 tftp-server
$mkdir /tftpboot
$chmod a+w /tftpboot
$service tftpd-hpa restart

linux@linux:~$ sudo mkdir /tftpboot
linux@linux:~$ ls
ARM_4412  Desktop    Downloads         gcc-4.6.4         Music     Public     test    vimconfig
core      Documents  examples.desktop  gcc-4.6.4.tar.xz  Pictures  Templates  Videos  vmware-tools-distrib
linux@linux:~$ sudo chmod a+w /tftpboot/
linux@linux:~$ ls /
bin   cdrom  etc         home        lib         media  opt   root  sbin  sys       tmp  var
boot  dev    ftp_server  initrd.img  lost+found  mnt    proc  run   srv   tftpboot  usr  vmlinuzlinux@linux:~$ sudo service tftpd-hpa restart
tftpd-hpa stop/waiting
tftpd-hpa start/running, process 11405

重启tftp需要管理员权限

4、 准备带传输的文件
$cp u-boot-fs4412.bin uImage exynos4412-fs4412.dtb /tftpboot
5、本机自环测试
#tftp 127.0.0.1
tftp>get
tftp>put
tftp>q
ls //有看到获取的文件,表示该tftp服务是OK的

linux@linux:~$ tftp localhost
tftp> get aaa
Error code 1: File not found
tftp> get uImage
tftp> quit
linux@linux:~$ ls
aaa       core     Documents  examples.desktop  gcc-4.6.4.tar.xz  Pictures  Templates  uImage  vimconfig
ARM_4412  Desktop  Downloads  gcc-4.6.4         Music             Public    test       Videos  vmware-tools-distrib
linux@linux:~$ rm uImage 
linux@linux:~$ ls
aaa       core     Documents  examples.desktop  gcc-4.6.4.tar.xz  Pictures  Templates  Videos     vmware-tools-distrib
ARM_4412  Desktop  Downloads  gcc-4.6.4         Music             Public    test       vimconfig
linux@linux:~$ 

6.3,安装主机端NFS

1、检查nfs服务是否安装
$ service nfs-kernel-server
如果未安装需安装 sudo apt-get install nfs-kernel-server

linux@linux:~$ service nfs-kernel-server
nfs-kernel-server: unrecognized service
linux@linux:~$ sudo apt-get install nfs-kernel-server
。
。
。
linux@linux:~$ service nfs-kernel-server* Usage: nfs-kernel-server {start|stop|status|reload|force-reload|restart}

2、修改 /etc/exports 文件为
#/etc/exports: the access control list for filesystems which may be exported
/nfs/rootfs *(rw,sync,no_root_squash)

linux@linux:~$ sudo vi /etc/exports 
linux@linux:~$ cat /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
#		to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
##/etc/exports: the access control list for filesystems which may be exported 
/nfs/rootfs  *(rw,sync,no_root_squash)

3、准备内容
$ sudo mkdir /nfs
$ sudo chmod 777 /nfs
$ cd /nfs
$ cp rootfs.tar.xz . 它已制作好的根文件系统
$ tar -xvf rootfs.tar.xz
$ sudo chmod 777 rootfs

linux@linux:~$ sudo mkdir /nfs
linux@linux:~$ sudo chmod 777 /nfs
linux@linux:~$ ls /
bin   cdrom  etc         home        lib         media  nfs  proc  run   srv  tftpboot  usr  vmlinuz
boot  dev    ftp_server  initrd.img  lost+found  mnt    opt  root  sbin  sys  tmp       var
linux@linux:~$ cd /nfs/
linux@linux:/nfs$ ls
linux@linux:/nfs$ cp /mnt/hgfs/Linuxsharexiaomei/镜像文件/rootfs.tar.xz .
linux@linux:/nfs$ ls
rootfs.tar.xz
linux@linux:/nfs$ tar -xvf rootfs.tar.xz 
.
.
.
linux@linux:/nfs$ ls
rootfs  rootfs.tar.xz
linux@linux:/nfs$ rm rootfs.tar.xz 
linux@linux:/nfs$ ls
rootfs
linux@linux:/nfs$ sudo chmod 777 rootfs 
linux@linux:/nfs$ ls
rootfs

4、重启 nfs 服务
$ sudo /etc/init.d/nfs-kernel-server restart

linux@linux:/nfs$ sudo /etc/init.d/nfs-kernel-server restart* Stopping NFS kernel daemon                                                                                                               [ OK ] * Unexporting directories for NFS kernel daemon...                                                                                         [ OK ] * Exporting directories for NFS kernel daemon...                                                                                                  exportfs: /etc/exports [3]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/nfs/rootfs".Assuming default behaviour ('no_subtree_check').NOTE: this default has changed since nfs-utils version 1.0.x[ OK ]* Starting NFS kernel daemon     

5、测试nfs服务是否安装成功
$ sudo mount -t nfs localhost:/nfs/rootfs/ /mnt/
$ ls /mnt/ 如果其中的内容和/nfs/rootfs中一致。 表示有挂载成功
$ sudo umount /mnt

linux@linux:/nfs$ sudo mount -t nfs localhost:/nfs/rootfs/ /mnt/
linux@linux:/nfs$ ls /mnt/
bin  dev  etc  lib  linuxrc  mnt  proc  root  sbin  sys  tmp  usr  var
linux@linux:/nfs$ ls rootfs/
bin  dev  etc  lib  linuxrc  mnt  proc  root  sbin  sys  tmp  usr  var
linux@linux:/nfs$ 
linux@linux:/nfs$ sudo umount /mnt

7,制作SD卡,并从SD卡启动 (使用的是2010版本u-boot,支持fastboot烧写的)

目标机安装(u-boot烧写调试) – 需要SD卡

将sdfuse_q 拷贝到Linux下
将SD卡插入电脑并识别
进入sdfuse_q执行如下操作
$ sudo ./mkuboot.sh /dev/sdb /*出现下面的信息,表示SD启动盘制作成功
Fuse FS4412 trustzone uboot file into SD card
/dev/sdb reader is identified.
u-boot-fs4412.bin fusing…
1029+1 records in
1029+1 records out
527104 bytes (527 kB) copied, 5.31834 s, 99.1 kB/s
u-boot-fs4412.bin image has been fused successfully.
Eject SD card
*/

linux@linux:~$ cp /mnt/hgfs/Linuxsharexiaomei/sdfuse_q . -a
linux@linux:~$ ls
aaa       core     Documents  examples.desktop  gcc-4.6.4.tar.xz  Pictures  sdfuse_q   test    vimconfig
ARM_4412  Desktop  Downloads  gcc-4.6.4         Music             Public    Templates  Videos  vmware-tools-distrib
linux@linux:~$ cd sdfuse_q/
linux@linux:~/sdfuse_q$ ls
add_padding  add_padding.c  add_sign  add_sign.c  chksum  chksum.c  Makefile  mkuboot.sh  sd_fusing_exynos4x12.sh  u-boot-fs4412.bin
linux@linux:~/sdfuse_q$ sudo ./mkuboot.sh /dev/sdb
Fuse FS4412 trustzone uboot file into SD card
/dev/sdb reader is identified.
u-boot-fs4412.bin fusing...
1029+1 records in
1029+1 records out
527104 bytes (527 kB) copied, 41.5004 s, 12.7 kB/s
u-boot-fs4412.bin image has been fused successfully.
Eject SD card

关闭开发板电源,将拨码开关SW1调至(1000)(SD启动模式)
刚才做好的SD启动盘插入SD卡插槽
打开电源
串口终端有如下信息,表示成功:
在这里插入图片描述

7.2,fastboot烧写

{//---fastboot烧写 连接USB线到板子上的USB OTG口 连接串口线到板子的COM2口   重启板子,并快速停下,在串口终端输入下面命令 /*如果有有需要,可以格式化 eMMC 并创建分区$ fdisk -c 0$ fatformat mmc 0:1$ ext3format mmc 0:2$ ext3format mmc 0:3$ ext3format mmc 0:4*/$ reset    重启切换到2010版的sd卡启动  $ fastboot  //会提示装驱动,选中第一天_环境搭建里的fastboot_driver 安装 	打开dos终端 进入USB_fastboot_tool\platform-tools目录输入> fastboot.exe flash bootloader u-boot-fs4412.bin  /*同理可以烧录其它镜像> fastboot.exe flash kernel zImage> fastboot.exe flash ramdisk ramdisk-uboot.img> fastboot.exe flash system system.img> fastboot -w*/关闭开发板电源,将拨码开关SW1调至0110(EMMC启动模式)后打开电源从flash 的u-boot启动  /*如果启动失败,可以通过拨号开关恢复到SD卡方式启动如果启动成功,想恢复到原来的u-boot启动 (第一次输入reset后会自动切换回去,不用拔拨号开关)   */} 	

8,目标机搭建

8.1,PING通Ubuntu和目标机(开发板)

在这里插入图片描述

注意:板子,电脑,虚拟机三个要处于同一个网段比如192.168.2.100 / 192.168.2.56 /192.168.2.32

  1. 查看电脑网络信息
  2. 根据电脑网络信息设置开发板网络配置
  3. 根据电脑网络信息设置Ubuntu网络配置

8.1.1,确认板子和电脑是能通信的

	 假设电脑网卡ip 为192.168.9.222  255.255.255.0 192.168.9.1启动板子,快速按任意键停在boot处,设置u-boot 的环境变量# setenv serverip 192.168.9.120    //注意它与虚拟机里 ubuntu 的ip要一致# setenv ipaddr 192.168.9.9# setenv gatewayip  192.168.9.1# pri  /*查看设置后效果 				FS4412 # pribaudrate=115200bootargs=root=/dev/nfs nfsroot=192.168.9.120:/nfs/rootfs rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.9.9bootcmd=tftp 41000000 uImage;tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000 - 42000000bootdelay=3ethact=dm9000ethaddr=11:22:33:44:55:66gatewayip=192.168.9.1ipaddr=192.168.9.9netmask=255.255.255.0serverip=192.168.9.120*/# ping 192.168.9.222   //测试网络是否连通  ,注意在u-boot中, 它能ping电脑, 电脑不能ping它  //注意,要拔掉jtag线,否则ping 会重启  host 192.168.9.222 is alive    //is alive 表示ok    # saveenv   保存设置	    
8.1.1.1,windows10系统默认是ping不通的,需要在防火墙中设置

在这里插入图片描述

8.1.1.2,电脑用的无线,开发板用网线连电脑,开发板能ping同有线网卡,ping不通无线网卡。ububtu能ping通无线网卡,ping不通有线网卡
描述有线网卡通过网线连接开发板无线网卡,和Ubuntu桥接
网卡信息
开发板信息
开发板ping电脑
Ubuntu信息
ubuntu ping电脑 linux@linux:~$ ping 192.168.199.109
PING 192.168.199.109 (192.168.199.109) 56(84) bytes of data.
64 bytes from 192.168.199.109: icmp_seq=1 ttl=128 time=0.889 ms
64 bytes from 192.168.199.109: icmp_seq=2 ttl=128 time=0.297 ms
64 bytes from 192.168.199.109: icmp_seq=3 ttl=128 time=1.31 ms
64 bytes from 192.168.199.109: icmp_seq=4 ttl=128 time=1.09 ms
^C
linux@linux:~$ ping 192.168.199.24
PING 192.168.199.24 (192.168.199.24) 56(84) bytes of data.
From 192.168.199.100 icmp_seq=1 Destination Host Unreachable
From 192.168.199.100 icmp_seq=2 Destination Host Unreachable
From 192.168.199.100 icmp_seq=3 Destination Host Unreachable
^C

问题原因

8.1.2,确认电脑和虚拟机时能通信

	编辑 -> 虚拟网络编辑器  -> 	 VMnet0 桥接到(选连板子的网卡) //注意不要用automic,应手动指定对应的网卡	                             虚拟机 -> 设置 -> 网卡适配器  -> 自定义 (选 VMnet0)    /*使虚拟机内的虚拟网卡,关联到电脑实际用到的网卡       通过选VMnet0 和 VMnet1 。实现连板子,还是上internet的切换*/                                     点ubuntu右上角网络图标 -> 右键选编辑连接 -> 全删掉 -> 添加(改新连接名称为board) -> IPV4 设置 -> 方法(选手动) -> 点添加 设置为 192.168.9.120 255.255.255.0 192.168.9.1 并保存退出		点右上角网络图标,先断开,再选board连接  // 通过选board,和internet 实现连板子,还是上internet的切换
$ ifconfig //看ip是否已变为了192.168.9.120
$ ping 192.168.9.222  //测试电脑和虚拟机是否联通 (如不通,可尝试修复一下网卡,重启虚拟机)   

8.1.3,确认板子能和虚拟机能通讯

	$ reset  重启boot$ ping 192.168.9.120         //注意: boot阶段是板子能ping 电脑 ,电脑不能ping板子host 192.168.9.120 is alive  //通讯OK  ,失败会显示not alive
  • 可以观察到一个现象:Ubuntu ping开发板,是ping不通的,此时,用开发板ping一下Ubuntu,是可以ping通的,同时会观察到,Ubuntu ping开发板,ping通了,接着马上又ping不通了
  • 这个现象表明链接时没问题的

8.2,网络自动 tftp 加载内核,并挂载nfs rootfs 启动

自启动命令bootcmd

 # setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000	/* 设置tftp方式加载内核setenv bootcmd    设置环境变量(自启动命令 bootcmd)tftp 41000000 uImage\;  通过tftp从虚拟机/tftpboot目录下下载内核uImage到板子的内存  41000000 处。    \; 用于分割多个命令tftp 42000000 exynos4412-fs4412.dtb   通过tftp下载设备树文件 exynos4412-fs4412.dtb 到板子的内存  42000000 处bootm 41000000 - 42000000   启动内核(41000000处放的是内核uImage, 42000000处放的是设备树文件)*/  # setenv bootargs root=/dev/nfs nfsroot=192.168.9.120:/nfs/rootfs rw console=ttySAC2,115200 clk_ignore_unused init=/linuxrc ip=192.168.9.9	 /* 挂载nfs  rootfssetenv bootarg  设置环境变量( bootarg是启动参数)root=/dev/nfs  指定根文件系统类型是 nfsnfsroot=192.168.9.120:/nfs/rootfs  指定nfs rootfs的位置 (是在ip 是192.168.9.120的机器上(ubuntu) ,的/nfs/rootfs目录下). 注意/nfs/rootfs必须和前面NFS服务配置文件设置一致     	   ttySAC2,115200 	串口2 ,波特率115200init=/linuxrc (init表示指定板子第一个运行的程序/linuxrc)ip=192.168.9.9  开发板ip*/# savenenv //保存环境变量掉电重启动板子  /* 看能否挂载nfs rootfs成功能看到下面信息表示成功[root@farsight ]# lsetc      linuxrc  proc     sbin     tmp      varbin      dev      lib      mnt      root     sys      usr在里面创建文件,电脑的/nfs/rootfs上同步变化*/           

在这里插入图片描述

  1. tftp 41000000 uImage; //下载内核uImage到开发板内存的41000000地址
  2. tftp 42000000 exynos4412-fs4412.dtb; //下载设备树文件exynos4412-fs4412.dtb到开发板内存的42000000地址
  3. bootm 41000000 - 42000000; //启动内核

8.2.1 开发板启动流程

在这里插入图片描述

  1. 在BootLoader阶段,会有一个3,2,1倒计时
  2. 计时结束之前敲键盘就会干预开发板启动,此时就进行一些交互命令
  3. 不干预,开发板就会去加载内核(实际上bootcmd命令,按命令的先后顺序执行)

这篇关于嵌入式linux-系统移植,搭建嵌入式Linux开发环境,嵌入式Linux内核结构,Android系统结构,开发板启动流程,安装TFTP,安装NFS,制作SD卡,并从SD卡启动,fastboot烧写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/359616

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创