【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十一章 制作Ubuntu文件系统
iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等
第七十一章 制作Ubuntu文件系统
作为linux开发平台,iTOP-STM32MP157也可以移植ubuntu系统.
Ubuntu Base是用于为特定需求创建自定义映像的最小rootfs。Ubuntu Base致力于为板级支持包(BSP)、受限制或集成环境中的应用创建适当的最小环境,作为应用或Linux容器(如LXC或Docker)演示映像的基础。
Ubuntu移植比较简单,ubuntu官方提供了制作好的根文件系统,我们只需要配置下相关内容即可放到板子上运行。本章我们构建的是ubuntu18.04系统。
下载好的Ubuntu –base源码,放在“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\05_ubuntu文件系统\01_ubuntu18_base源码”目录中如下图:

我们事先准备好了编译好的ubuntu-base的烧写镜像放在“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\05_ubuntu文件系统\02_制作好的镜像”目录中如下图:
![]()
需要注意的是ubuntu文件系统在烧写之后并没有默认连接网络,需要自己使用命令“dhclient eth0”。进行连接网络。
使用命令“vim /etc/resolv.conf”,添加以下内容
nameserver 114.114.114.114
nameserver 8.8.8.8
添加完成如下图所示:

至此我们的ubuntu文件系统就可以上网了
71.1 Ubuntu-base获取
Ubuntu官方针对不同的CPU架构提供相应的ubuntu base根文件系统,有amd64(64位X86)、armhf、i386(32位X86)、powerpc、ppc64el等系统的。
我们可以先下载到Windows计算机内,网站如下。
Ubuntu Base 18.04.5 LTS (Bionic Beaver)
ubuntu-base-18.04.5-base-armhf.tar.gz,点击下载即可,如下图所示:

这个压缩包在我们的资料有提供。放在“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\05_ubuntu文件系统\01_ubuntu20_base源码”目录下
然后我们使用SSH工具传输到我们在虚拟机ubuntu上所建立的文件夹内,拷贝完成如下图所示:

71.2 解压Ubuntu-base
首先我们使用命令“mkdir raw-rootfs”,在当前目录下建立raw-rootfs文件,如下图所示

然后我们使用命令“sudo tar -xvpf ubuntu-base-18.04.5-base-armhf.tar.gz -C raw-rootfs/”解压系统文件(建议制作文件的小节都在普通用户下操作),解压完成之后就是根文件系统,使用命令“ls”查看目录,如下图所示:
![]()
71.3 安装Qemu-User-Static工具
QEMU是专门模拟不同机器架构的软件,在ubuntu中对其支持良好,若需要挂载ubuntu armhf版本的文件,必须安装qemu-user-static工具。
首先Ubuntu下使用命令“sudo apt-get install qemu-user-static”安装,安装过程中按y继续。如下图所示:

这一步骤是将qemu-user-static安装到了pc的ubuntu上,然后使用命令
sudo cp /usr/bin/qemu-arm-static ./raw-rootfs/usr/bin/
拷贝qemu-arm-static到刚刚解压出来的目录。如下图所示:
![]()
71.4 设置软件源
Ubuntu安装软件是通过名apt-get从网上下载安装的。我们需要指定软件源。
为了制作成功的根文件系统能够联网,可以直接拷贝本机的dns配置文件到根文件系统的相应位置,使用命令“sudo cp /etc/resolv.conf raw-rootfs/etc/resolv.conf”,如下图所示:
![]()
由于默认的apt源服务器在国外,导致下载速度特别慢,所以我们在这里换成国内的清华源使用命令“sudo vim ./raw-rootfs/etc/apt/sources.list”进入该文件。如下图所示:
![]()
删除之前的内容替换为如下内容:
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main universe restricted
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main universe restricted
如下图所示:

保存并退出。
71.5 挂载根文件系统并Chroot
(1)首先在本机挂载刚刚下载好的文件系统,需要挂载proc, sys, dev, dev/pts等文件系统。使用命令“sudo vi mount.sh”添加挂载脚本。如下图所示:
![]()
挂载过程的脚本mount.sh内容如下
#!/bin/bash
mnt() {echo "MOUNTING"sudo mount -t proc /proc ${2}procsudo mount -t sysfs /sys ${2}syssudo mount -o bind /dev ${2}devsudo mount -o bind /dev/pts ${2}dev/ptssudo chroot ${2}
}
umnt() {echo "UNMOUNTING"sudo umount ${2}procsudo umount ${2}syssudo umount ${2}dev/ptssudo umount ${2}dev
}if [ "$1" == "-m" ] && [ -n "$2" ] ;
thenmnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
thenumnt $1 $2
elseecho ""echo "Either 1'st, 2'nd or both parameters were missing"echo ""echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"echo ""echo "For example: ch-mount -m /media/sdcard/"echo ""echo 1st parameter : ${1}echo 2nd parameter : ${2}
fi
添加完成如下图:

保存退出
(2)然后使用命令“sudo chmod 777 mount.sh”修改脚本权限,如下图所示:
![]()
(3)然后使用命令“sudo ./mount.sh -m raw-rootfs/”运行挂载。如下图所示:
![]()
此时我们可以看到,根目录切换成了当前制作ubuntu的目录。
(4)由于ubuntu base是一个最小根文件系统,很多命令、桌面以及软件都没有,因此我们需要先安装一下常用的命令和软件
首先使用命令“apt update”来进行系统源的更新,如下图所示:

然后使用以下命令来安装基本的软件:
apt-get install sudo language-pack-en-base ssh net-tools ethtool ifupdown iputils-ping rsyslog htop vim kmod bluez iw network-manager qt5-default openbox make gcc g++
如下图所示:

中间可能会报以下错误,我们需要运行以下命令来解决

cd /var/lib/dpkg
mv info info.bak
mkdir info
apt-get upgrade
运行完成之后,重新执行一下安装命令,则不会进行报错
安装完成之后,如果想要安装对应的桌面可以继续执行以下命令
apt-get install xubuntu-desktop
apt-get install xfce4
apt-get install -y xdm
sudo apt-get install vnc4server
vncserver
具体的安装步骤不再截图,安装完成之后开机启动桌面管理器。需要在 /etc/sudoers 文件中赋予权限
使用“vi /etc/sudoers ”命令进入sudoers文件夹,添加以下内容,赋予topeet用户对应的权限(topeet在下一步骤中会创建)
topeet ALL=(ALL:ALL) ALL
添加完成如下图所示:

- 然后使用命令“passwd root”设置root用户密码,在这里我们设置成topeet。如下图所示:

然后使用命令“adduser topeet”,添加topeet用户,如下图所示:

我们的密码设置为了“topeet”
- 接下来使用命令“ vi /etc/hostname”进入hostname文件夹,将“localhost.localdomain”修改为“iTOP-STM32MP157.localdomain”设置主机名称:
修改完成如下图所示:
![]()
- 设置好以后就可以退出根文件系统了,输入命令“exit”退出。如下图所示:
![]()
最后我们将退出以后再执行一下“sudo ./mount.sh -u raw-rootfs/”脚本取消挂载。如下图所示:
![]()
由于我们需要自动装载一些ko驱动文件且让这些文件在开机之后自动装载,我们首先拷贝“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\05_ubuntu文件系统\03_ko”路径下的ko文件夹到文件系统的usr目录下,拷贝完成如下图所示:

然后将“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\05_ubuntu文件系统\04_rc.local”路径下的rc.local文件拷贝到文件系统的etc目录下,拷贝完成如下图所示:

然后使用命令“sudo chmod 777 rc.local”修改文件对应的权限,如下图所示:

至此,ubuntu base根文件系统就已经制作好了,然后我们进行下一个章节的镜像制作了。
71.6 Ubuntu文件系统测试
71.6.1 制作Ubuntu烧写镜像
如下图所示,是制作好的ubuntu系统文件
![]()
使用命令“mkdir rootfs”创建一个文件夹rootfs用来挂载之后要制作出来的 rootfs.ext4文件系统镜像,如下图所示:

然后使用命令
dd if=/dev/zero of=rootfs.ext4 bs=1M count=2000
mkfs.ext4 -L rootfs rootfs.ext4
建立一个大小为2000M的ext4 磁盘(作者在这里制作的大小为2000MB,个人感觉不够用的话,可以根据自身情况来进行增大,但要注意的是制作的镜像越大,对应的烧写时间越长),如下图所示:

接下来使用 mount 命令将 rootfs.ext4 挂载到rootfs 目录下(挂载要使用root用户),如下图所示:
mount ./rootfs.ext4 rootfs
![]()
然后拷贝我们制作的文件系统到rootfs 目录下,如下图所示:
cp -a raw-rootfs/* ./rootfs

拷贝完成后,使用命令“umount rootfs”,进行解除挂载,如下图所示:
![]()
71.6.2 Ubuntu 镜像的烧写
由于 Ubuntu镜像的烧写和之前的QT系统存在区别,QT系统所使用的内核可以不用区分屏幕,而ubuntu系统不同。所以我们在烧写镜像的时候需要修改对应的内核镜像,我们以烧写ubuntu18无桌面版本的镜像为例,镜像存放路径为“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\05_ubuntu文件系统\02_制作好的镜像\ubuntu18无桌面镜像”,如下图所示:

在这里rootfs.ext4为我们要烧写文件系统的镜像。而rootfs.tar.gz为我们文件系统的源码,之后对文件系统的修改都是通过rootfs.tar.gz源码文件来修改的,最后就是我们的不同屏幕的内核镜像,进入该文件如下图所示:

这里只有四种屏幕的内核镜像,原因是这四种屏幕所使用的触摸驱动相同,而剩下的4.3寸屏幕和10.1寸屏幕所用到的驱动不同,故以上任何一个内核镜像都可以适配。而我们用到以上四种屏幕之后,需要拷贝对应目录下的bootfs.ext4内核镜像来替换烧写文件image目录下的bootfs.ext4文件。
然后我们可以根据烧写章节进行对应的烧写
71.6.3 Ubuntu 根文件系统测试
将上一小节所制作好的文件系统镜像rootfs.ext4拷贝到image烧写目录下,覆盖掉之前的rootfs.ext4,然后进行烧写,烧写启动之后如下图所示:
登录
用户名 topeet
密码 topeet

我们在使用过程中,可以按照ubuntu正常开发流程来使用。例如运行hello world程序。
首先我们使用命令“apt-get install gcc --fix-missing”安装编译器(我们默认已经安装好了)。安装完成后以后输入“gcc -v”查看 gcc 版本。如下图所示:

使用“mkdir test”创建测试文件夹进入,如下图:

然后我们使用命令“vim helloworld.c”创建c文件。
![]()
输入如下内容:
#include<stdio.h>
int main(void)
{printf("hello world!\r\n");return 0;
}
如下图:

添加完成之后保存并退出。
然后使用命令“gcc -o helloworld helloworld.c -static”编译helloworld程序。如下图所示:

最后我们使用命令“./helloworld”即可运行程序,如下图。
![]()
17.6.4 Ubuntu WIFI测试
烧写完成之后启动开发板,进入登录界面,登录
用户名 topeet
密码 topeet
进入文件系统之后如下图所示:

然后我们使用命令“su root”,进入root用户,进入成功如下图所示:
![]()
使用关闭以太网命令
ifconfig eth0 down

输入以下命令查看网络设备, 如下图所示
nmcli dev

由于测试用的开发板之前已经连接过wiifi了,所以可能会和大家显示的不同,输入以下命令开启 wifi
nmcli r wifi on

输入以下命令连接 wifi
nmcli dev wifi connect "wifi 名" password "密码"
作者连接公司的 wifi, 输入以下命令:
nmcli dev wifi connect "2701" password "topeet2015"
![]()
输入以下命令发现可以 ping 通百度,说明 WiFi 联网成功。
ping www.baidu.com

至此我们的wifi测试就完成了。
71.6.5 4.3寸屏幕校准
使用4.3寸屏幕的客户在烧写有界面的ubuntu系统后,会发现屏幕的触摸不准确,所以我们需要校准屏幕。
开机启动之后,进入登录界面,在终端我们用户名和密码都输入“topeet”即可进入系统,如下图所示:

然后我们使用“su root”命令输入密码“topeet”转为root用户,如下图所示:

然后我们使用以下命令
vim /usr/share/X11/xorg.conf.d/40-libinput.con
进入40-libinput.con文件夹如下图所示:

我们找到关于触摸屏幕的设置信息“Identifier "libinput touchscreen catchall"”如下图所示:

在该设置信息下添加以下内容,添加完成如下图所示:
Option "CalibrationMatrix" "-1 0 1 0 -1 1 0 0 1"

保存退出,然后重启开发板,再次打开图形化界面会发现,触摸正常了。
71.7 使用制作好的Ubuntu文件系统
在网盘目录“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\05_ubuntu文件系统\02_制作好的镜像”下有制作好的文件系统镜像rootfs.ext4,和制作好的压缩文件 rootfs.tar.gz。
rootfs.ext4文件可以直接拷贝到image目录下,替换原来的文件系统镜像,然后直接进行烧写即可。
要是我们想对Ubuntu系统进行一定的 修改,则需要将rootfs.tar.gz压缩包拷贝到ubuntu虚拟机下任意目录,执行“tar -vxf rootfs.tar.gz”解压,得到的文件夹raw-rootfs就是开发板的Ubuntu-base文件系统,可以在此基础上修改文件系统,解压完成之后的文件如下图所示。

然后根据17.5章节进行挂载进入chroot,就可以对文件系统进行修改,如下图:

然后根据17.6.1小节“制作Ubuntu烧写镜像”,制作可供我们烧写的镜像,然后再使用烧写工具将Ubuntu文件系统烧写进开发板。
相关文章:
【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十一章 制作Ubuntu文件系统
iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…...
中间件漏洞总结
参考:Tomcat漏洞详解-CSDN博客 tomcat 历史漏洞 阿里云漏洞库 (aliyun.com) 弱口令和war远程部署漏洞 弱口令 Tomcat8.* 登录页面:/manager/html 弱口令:tomcat/tomcat 后台Getshell 登录到后台后可以通过部署 war 包进行 getshell wa…...
PySpark Yarn集群模式
目录 简介 一、PySpark简介 二、YARN模式概述 三、配置环境 1. 安装与配置Spark 2. 配置Hadoop和YARN 3. 启动yarn 四、编写PySpark脚本 五、提交PySpark作业到YARN 参数解释: 六、常见问题及解决 七、总结 简介 随着大数据的普及,Spark作为…...
Matlab基于经纬度点并行提取指定日期的tiff栅格位置的值
文章目录 前言一、基本说明二、代码 前言 该 MATLAB 代码用于从 GeoTIFF 文件中提取基于特定地理位置(经纬度)和日期的某个点的相关数据。代码首先读取一个包含事件数据(日期、经纬度)的 Excel 文件,然后根据日期和位…...
npm入门教程19:npm包管理
一、代码更新 遵循语义化版本控制: 在更新包时,应遵循语义化版本控制(Semantic Versioning,简称SemVer)规范。这意味着版本号的变更应反映代码变更的程度,通常遵循主版本号.次版本号.修订号的格式。主版本号…...
【NOIP提高组】虫食算
【NOIP提高组】虫食算 C语言C 💐The Begin💐点点关注,收藏不迷路💐 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。来看一个简单的例子: 43#98…...
软件测试面试题个人总结
前面看到了一些面试题,总感觉会用得到,但是看一遍又记不住,所以我把面试题都整合在一起,都是来自各路大佬的分享,为了方便以后自己需要的时候刷一刷,不用再到处找题,今天把自己整理的这些面试题…...
HTML 语法规范——代码注释、缩进与格式、标签与属性、字符编码等
文章目录 一、代码注释1.1 使用注释的主要目的1.2 使用建议二、标签的使用2.1 开始标签和结束标签2.2 自闭合标签2.3 标签的嵌套2.4 标签的有效性三、属性四、缩进与格式4.1 一致的缩进4.2 元素单独占用一行4.3 嵌套元素的缩进4.4 避免冗长的行五、字符编码六、小结在开发 HTML…...
【Wi-Fi】WiFi中QAM及16-QAM、64-QAM、512-QAM、1024-QAM、2048-QAM、4096-QAM整理
参考链接 什么是QAM?QAM是如何工作的? - 华为 不同阶QAM调制星座图中,符号能量的归一化计算原理 - 知乎 16 QAM modulation vs 64 QAM modulation vs 256 QAM modulation 512 QAM vs 1024 QAM vs 2048 QAM vs 4096 QAM modulation type…...
红黑树的平衡之舞:数据结构中的优雅艺术
文章目录 前言🚀一、红黑树的介绍1.1 红黑树的概念1.2 红黑树的特点1.3 红黑树的性质 🚀二、红黑树结点的定义🚀三、红黑树的框架🚀四、旋转操作🚀五、红黑树的插入操作5.1 uncle结点存在且为红5.2 uncle结点不存在或者…...
angular实现list列表和翻页效果
说明:angular实现list列表和翻页效果 上一页 当前页面 下一页 效果图: step1: E:\projectgood\ajnine\untitled4\src\app\car\car.component.css .example-form-fields {display: flex;align-items: flex-start; }mat-list-item{background: antiquew…...
闯关leetcode——3285. Find Indices of Stable Mountains
大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/find-indices-of-stable-mountains/description/ 内容 There are n mountains in a row, and each mountain has a height. You are given an integer array height where height[i] represents t…...
算法【Java】—— 动态规划之斐波那契数列模型
动态规划 动态规划的思路一共有五个步骤: 状态表示:由经验和题目要求得出,这个确实有点抽象,下面的题目会带大家慢慢感受状态标识状态转移方程初始化:避免越界访问 dp 表,所以在进行填表之前我们要预先填…...
idea连接docker并构建镜像
安装docker 安装docker idea连接docker 安装docker插件 设置docker连接 设置docker.exe 这个docker.exe是为了运行docker,可以通过安装docker desktop获取 docker desktop下载地址 右键图标找到文件位置 在同级的resource中 编写Dockerfile # 使用官方 Nginx…...
百度如何打造AI原生研发新范式?
👉点击即可下载《百度AI原生研发新范式实践》资料 2024年10月23-25日,2024 NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。本届大会邀请了工业界和学术界的专家,优秀的工程师和产品经理,以及其它行…...
RedisTemplate类中的常用方法粗解(简单明了,预计5分钟看完)
在阅读项目代码过程中发现引用RedisTemplate 的方法操作redis时,都会有一些特定的ops ,对此好奇就查资料的情况下有了本博客。 操作之前付一张我们项目中的用到的地方的图 另外本文中的语言用到的是Java,附上试验用到的redisTemplete依赖 <…...
鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)
在鸿蒙ArkTS中,布局容器组件有很多,常见的有: ⑴ Column:(垂直布局容器):用于将子组件垂直排列。 ⑵ Row:(水平布局容器):用于将子组件水…...
显存占用 显存测试
目录 显存测试 显存占用示例 一个模型多卡占用 显存测试 import torch# 计算张量的大小(例如:每个 float 占用 4 字节) # 40GB 40 * 1024 * 1024 * 1024 字节 # 每个 float 4 字节,因此需要的 float 数量为 (40 * 1024 * 1024…...
快速入门CSS
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 目录 CSS css的三种引入方式 css书写规范 选择器分类 标签选择器 class选择器 id选择器 复合选择器 通配符选择器 color颜色设置 border边框设置 width/heigth 内/外边距 C…...
AcWing 1073 树的中心 树形dp (详解)
这道题目非常有新意,在过去,我们通常先访问子节点去更新父节点的状态,但是这道题我们还需要从父节点去更新子节点。 我们可以想象为向上和向下两个方向,我们任取一点,先向下走,再回来更新上面的点…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
