嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第五天-kernel配置(物联技术666)
链接:https://pan.baidu.com/s/1eb94AaDM-cIZsbr929Isbw?pwd=1688
提取码:1688
上午:linux内核介绍 徐登伟老师
下午:linux的配置
教学内容:
一、基本kernel的制作:
1、去开源社区下载原版kernel,linux-2.6.34.tar.bz2
2. 解压linux-2.6.34.tar.bz2源码包
tar jxvf linux-2.6.34.tar.bz2 -C /home/
3. 修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改
ARCH ? =arm //指定是arch/arm
CROSS_COMPILE ?=/usr/local/arm/4.3.2/bin/arm-linux- //指定编译器是目录下的交叉编译
注意:交叉编译器的环境变量也需要改为arm-linux-gcc-4.3.2
#export PATH=/usr/local/arm/4.3.2/bin/:$PATH //加入临时环境变量
4. 修改平台输入时钟
修改平台的时钟频率,修改内核源码“arch/arm/mach-s3c2440/mach-smdk2440.c”
把时钟初始化中(S3C24XX_init_clocks(16934400 ))的16934400 改为12000000,因为我们的开发板上为12M
5. 修改机器类型ID号(一般可以不修改,主要是要在vivi分表的时候和这里保持一致)
bootloader启动内核时,会传递机器类型ID进来,这里需根据bootloadr传进的ID修改内核ID号
在内核源码的“arch/arm/tools/mach-types”文件查找S3C2440,这里刚好与我们的bootloader相同,所以不用做修改,直接保存退出即可,如果不同则根据bootloader的内容修改此文件,或根据此文件修改boorloader的内容(在vivi中可通过param show查看)。
6. 解压yaffs_patch.tar.bz2源码包,进入yaffs2文件夹,给内核打上补丁使内核支持yaffs2
# ./ patch-ker.sh c /home/linux-2.6.34
7. 修改内核mtd分区和bootloader(vivi)使其一致(这步主要是为vivi服务)
编辑文件arch/arm/plat-s3c24xx/common-smdk.c(同样和vivi分表一致)
static struct mtd_partition smdk_default_nand_part[] =
{
[0] = {
.name = "vivi", //命令名字
.size = 0x00030000, //大小
.offset = 0, //开始位置
},
[1] = {
.name = "kernel",
.offset = 0x00050000,
.size = 0x00300000,
},
[2] = {
.name = "rootfs",
.offset = 0x00350000,
.size = 0x03cac000,
}
};
8. 修改文件drivers/mtd/nand/s3c2410.c
将s3c2410_nand_init_chip函数里的NAND_ECC_SOFT(switch case后面的不用改)改为NAND_ECC_NONE(因为在内核中默认配置不支持ECC校验,当然也可以在内核配置时选中ECC选项)
9. 到llinux-2.6.30目录下执行命令
#cp arch/arm/configs/s3c2410_defconfig .config
10. 执行make menuconfig,并对选项进行配置
1)System Type --->
S3C2440 and S3C2442 machines --->
仅保留SMDK2440 与SMDK2440 whith S3C2440 CPU module两个选项,将其他的选项全部勾掉
2)Kernel Features --->
[*]Use the arm EABI to compile the kernel(选中该选项)
3)File systems --->
a、把与ext2 ext3 ext4相关的所有选项全部去掉
b、Miscellaneous filesystems --->
<*>YAFFS2 file system support(选中此选项)
去除所有与jffs2相关的选项
保存退出
11、make zImage,在arch/arm/boot下生成编译好的可执行程序
或make uImage,在arch/arm/boot下生成编译好的可执行程序
二、带设备驱动的kernel
开始先重复上面的1-10步:
1、dm9000网卡驱动的移植:
1)修改arch/arm/plat-s3c24xx/devs.c 文件,增加以下代码:
/****add by dengwei*********************************/
#include <linux/dm9000.h>
static struct resource s3c_dm9k_resource[] =
{
[0] =
{
.start = S3C2410_CS3, //网卡连接在CS3总线上
.end = S3C2410_CS3 + 3,
.flags = IORESOURCE_MEM,
},
[1] =
{
.start = S3C2410_CS3 + 4,
.end = S3C2410_CS3 + 4 + 3,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_EINT7,
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
}
};
static struct dm9000_plat_data s3c_dm9k_platdata =
{
.flags = DM9000_PLATF_16BITONLY,
};
struct platform_device s3c_device_dm9k =
{
.name = "dm9000",
.id = 0,
.num_resources = ARRAY_SIZE(s3c_dm9k_resource),
.resource = s3c_dm9k_resource,
.dev =
{
.platform_data = &s3c_dm9k_platdata,
}
};
EXPORT_SYMBOL(s3c_device_dm9k);
/*************************add bu dengwei***************************/
2)修改 arch/arm/mach-s3c2440/mach-smdk2440.c文件
修改struct platform_device *smdk2440_devices[] __initdata结构体增加以下代码:
static struct platform_device *smdk2440_devices[] __initdata =
{
&s3c_device_ohci,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_dm9k, //for dm9000 add by dengwei
};
3)修改以下文件 arch/arm/plat-s3c24xx/include/plat/s3c244x.h
extern struct platform_device s3c_device_dm9k; // add by dengwei
4)修改drivers/net/dm9000.c源码:
在头文件区增加头文件:
#include <mach/regs-mem.h>
大约1365行左右增加以下代码:
static int __devinit dm9000_probe(struct platform_device *pdev)
{
//add here
}
注意:添加在dm9000_probe函数的开头
/**********add by dengwei******************************************/
#if defined(CONFIG_ARCH_S3C2440)
int oldval_bwscon = *((volatile unsigned int *)S3C2410_BWSCON);
*((volatile unsigned int *)S3C2410_BWSCON)=(oldval_bwscon&~(3<<16))| S3C2410_BWSCON_DW3_16|S3C2410_BWSCON_WS3|S3C2410_BWSCON_ST3; //设置BANK3:总线宽度为16,使能nWAIT
*((volatile unsigned int *)S3C2410_BANKCON3) = 0x1f7c; //设置BANK3的时间参数
#endif
/**********add by dengwei*************************************************/
5)修改make menuconfig配置选项:
Devices Drivers --->
Network device support --->
Ethernet (10 or 100) --->
[*]DM9000 support
(4)DM9000 maxinum debug level
//仅保留这两个选项,其余的全部去掉
6)重新编译内核,烧入开发板中即可
7)第一次使用的开发板需使用 ifconfig eth0 hw ether 12:34:56:78:32:65 设置mac地址
(MAC地址可以随便设置)
使用ifconfig eth0 192.168.220.*设置开发板IP
使用ping命令ping主机即可
2、USB驱动(U盘支持)
配置内核对USB设备的支持,2.6.34内核中对USB设备的支持已经非常全面了
这里只需要按照以下配置 就可以了,配置完后重新编译内核烧到开发板上
1)、修改make menuconfig
SCSI device support --->
< > RAID Transport Class
<*> SCSI device support
< > SCSI target support
[*] legacy /proc/scsi/ support
*** SCSI support type (disk, tape, CD-ROM) ***
<*> SCSI disk support
< > SCSI tape support
< > SCSI OnStream SC-x0 tape support
< > SCSI CDROM support
<*> SCSI generic support
< > SCSI media changer support
[*] HID Devices --->
--- HID Devices
-*- Generic HID support
[ ] /dev/hidraw raw HID device support
*** USB Input Devices ***
<*> USB Human Interface Device (full HID) support
[ ] PID device support
[*] /dev/hiddev raw HID device support
[*] USB support --->
{*} Support for Host-side USB
[ ] USB verbose debug messages
[ ] USB announce new devices
*** Miscellaneous USB options ***
[*] USB device filesystem
[*] USB device class-devices (DEPRECATED)
<*> OHCI HCD support
<*> USB Mass Storage support
2)、插入U盘。
当系统启动后插入U盘就会出现一些信息,可以看到sda就是U盘设备了,sda1是U盘的一个分区。
mount /dev/sda1 /mnt/ -o utf8
utf8 参数可以识别中文
3、LCD
1)、修改 arch/arm/mach-s3c2440/mach-smdk2440.c 如下:
/* LCD driver info */
static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
.lcdcon5 = S3C2410_LCDCON5_FRM565 |
// S3C2410_LCDCON5_INVVLINE |
// S3C2410_LCDCON5_INVVFRAME |
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
.type = S3C2410_LCDCON1_TFT,
.width = 320,
.height = 240,
.pixclock = 64000, /* HCLK 60 MHz, divisor 10 */
.xres = 320,
.yres = 240,
.bpp = 16,
.left_margin = 18,
.right_margin = 38,
.hsync_len = 30,
.upper_margin = 18,
.lower_margin = 18,
.vsync_len = 3,
};
static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {
.displays = &smdk2440_lcd_cfg,
.num_displays = 1,
.default_display = 0,
#if 0
/* currently setup by downloader */
.gpccon = 0xaa940659,
.gpccon_mask = 0xffffffff,
.gpcup = 0x0000ffff,
.gpcup_mask = 0xffffffff,
.gpdcon = 0xaa84aaa0,
.gpdcon_mask = 0xffffffff,
.gpdup = 0x0000faff,
.gpdup_mask = 0xffffffff,
#endif
.gpccon = 0xaa955699, //这是将GPC和GPD设置成功能引脚,也可以不设置
.gpccon_mask = 0xffc003cc,
.gpcup = 0x0000ffff,
.gpcup_mask = 0xffffffff,
.gpdcon = 0xaa95aaa1,
.gpdcon_mask = 0xffc0fff0,
.gpdup = 0x0000faff,
.gpdup_mask = 0xffffffff,
//.lpcsel = ((0xCE6) & ~7) | 1<<4,
.lpcsel = 0xf82, //设置TCONSEL寄存器选择三星240x320
};
static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_ohci,
&s3c_device_lcd, //检查这里有没有加上
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_dm9k, //for dm9000 add by xiuhai.deng
};
a、如果要让系统启动起来看到 bootlogo 小企鹅,必须得在 make menuconfig 中进行配置添加
在 Device Drivers ---> Graphics support ---> Bootup logo下面可以全部选中支持
b、打开gimp号称 linux 下的 photoshop ,安装windows版(gimp-2.6.9-i686-setup.exe)
打开任何格式的一张将要转换的图片
选择:图像--->模式--->索引颜色转换--->最大颜色数量设置为(244)--->转换
还可以通过:图像--->缩放图像--->设置想要的图像大小
最后:文件--->另存为--->选择ppm格式--->保存格式为 ASCII
c、将转换好的图片拷贝到 drivers\video\logo 替换 logo_linux_clut224.ppm
并删除 logo_linux_clut224.c和logo_linux_clut224.o重新make zImage
d、且对于大多系统bootlogo图片的大小可以随便,且无需改动源码就可以显示
e、去掉10分钟后自动关屏问题:
在有一个 drivers/char/vt.c 文件其中有一个变量(blankinterval)可以设置它
来修改自动关屏的时间,也可以在函数(blank_screen_t)开头直接返回,这
样就永远不会关屏了
4、触模屏
1)、将 drivers/input/touchscreen/s3c2410_ts.c 换掉(在课件文件夹内)
2)、make menuconfig
Device Driver -->
Input device support -->
Touchscreens -->
[*]Samsung S3C2410 touchscreen input driver (它对应s3c2410_ts.c驱动)
5、UDA1341声卡驱动
1)、make menuconfig 声卡的配置是:
Device Drivers
<*>Sound card support
<*>Advanced Linux Sound Architecture --->(除这项外,其它全部不选中)
<*>Advanced Linux Sound Architecture (除了以下选项,其它均不选中)
<*> OSS Mixer API
<*> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include plugin system
[*] Verbose procfs contents
<*>ALSA for Soc audio support(只选择下面两项)
<*>SoC Audio for the Samsung S3C24XX chips
<*>SoC I2S Audio support UDA134X wired to a S3C24XX
2)、配置声卡驱动
下面是我在mach-smdk2440.c上修改的地方:
…
#include <sound/s3c24xx_uda134x.h>
…
static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data =
{
.l3_clk = S3C2410_GPG(10), //这三个引脚是跟据自己开发板的硬件连接决定的
.l3_data = S3C2410_GPG(9),
.l3_mode = S3C2410_GPG(11),
.model = UDA134X_UDA1341,
};
static struct platform_device s3c24xx_uda134x =
{
.name = "s3c24xx_uda134x",
.dev =
{
.platform_data = &s3c24xx_uda134x_data,
}
};
static struct platform_device *smdk2440_devices[] __initdata =
{
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_rtc,
&s3c24xx_uda134x,
};
…
3)、编译、下载
在内核目录下make zImage后将生成的内核文件烧写到开发板。
4)、测试
启动开发板后将已经拷贝歌曲的U盘插入到开发板的USB接口,挂载U盘后,运行”cat 01.mp3 > /dev/dsp”命令后听到音频耳机输出哧哧的声音,证明声卡驱动配置成功。
6、mmc/SD card driver
1)、arch/arm/mach-s3c2440/mach-smdk2440.c platform结构中增加&s3c_device_sdi语句。
static struct platform_device *smdk2440_devices[] __initdata =
{
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&s3c_device_nand,
&s3c_device_sdi, //add here
};
在make menuconfig时选上所有关于sd卡的信息,要想支持中文还得选上:
Device Drivers --->
<*> MMC/SD/SDIO card support --->
--- MMC/SD/SDIO card support
[ ] MMC debugging
[ ] Allow unsafe resume (DANGEROUS)
*** MMC/SD/SDIO Card Drivers ***
<*> MMC block device driver
[*] Use bounce buffer for simple hosts
< > SDIO UART/GPS class support
< > MMC host test driver
*** MMC/SD/SDIO Host Controller Drivers ***
< > Secure Digital Host Controller Interface support
< > MMC/SD/SDIO over SPI
<*> Samsung S3C SD/MMC Card Interface support
File system--》
DOS/FAT/NT Filesystems--》
VFAT(Windows-95)fs support
(437)Default codepage for FAT
**把437改为936
Native language support -->
[*]Simplified Chinese charset
[*]NLS UTF-8
这样就可直接挂载了 mount -t vfat /dev/mmcblk0 /mnt
如果sd卡分区了 mount -t vfat /dev/mmcblk0p1 /mnt
直接读写sd就可以了
2)、爱普板子SD卡少接两根引脚,分别是检测SD卡插拔的中断引脚和SD卡写保护的引脚
所以插上SD卡后要重启才能起作用
相关文章:
嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第五天-kernel配置(物联技术666)
链接:https://pan.baidu.com/s/1eb94AaDM-cIZsbr929Isbw?pwd1688 提取码:1688 上午:linux内核介绍 徐登伟老师 下午:linux的配置 教学内容: 一、基本kernel的制作: 1、去开源社区下载原…...

Java笔记(死锁、线程通信、单例模式)
一、死锁 1.概述 死锁 : 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法往下执行。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进…...

DAY11_(简易版)VUEElement综合案例
目录 1 VUE1.1 概述1.1.1 Vue js文件下载 1.2 快速入门1.3 Vue 指令1.3.1 v-bind & v-model 指令1.3.2 v-on 指令1.3.3 条件判断指令1.3.4 v-for 指令 1.4 生命周期1.5 案例1.5.1 需求1.5.2 查询所有功能1.5.3 添加功能 2 Element2.0 element-ui js和css和字体图标下载2.1 …...

【Kafka】开发实战和Springboot集成kafka
目录 消息的发送与接收生产者消费者 SpringBoot 集成kafka服务端参数配置 消息的发送与接收 生产者 生产者主要的对象有: KafkaProducer , ProducerRecord 。 其中 KafkaProducer 是用于发送消息的类, ProducerRecord 类用于封装Kafka的消息…...
【C语言】(1)初识C语言
什么是C语言 C语言是一种广泛应用的计算机编程语言,它具有强大的功能和灵活性,使其成为系统编程和底层开发的首选语言。C语言的设计简洁、高效,且不依赖于特定的硬件或系统,因此在各种计算平台上都能稳定运行。 C语言的特点 高…...
SpringCloudStream整合MQ(待完善)
概念 Spring Cloud Stream 的主要目标是各种各样MQ的学习成本,提供一致性的编程模型,使得开发者能够更容易地集成消息组件(如 Apache Kafka、RabbitMQ、RocketMQ) 官网地址:Spring Cloud Stream 组件 1. Binder 2…...

【Java 数据结构】包装类简单认识泛型
包装类&简单认识泛型 1 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱 2 什么是泛型3 引出泛型3.1 语法 4 泛型类的使用4.1 语法4.2 示例4.3 类型推导(Type Inference) 5 泛型如何编译的5.1 擦除机制5.2 为什么不能实例化泛型类型数组 6 泛型…...

第139期 做大还是做小-Oracle名称哪些事(20240125)
数据库管理139期 2024-01-25 第139期 做大还是做小-Oracle名称哪些事(20240125)1 问题2 排查3 扩展总结 第139期 做大还是做小-Oracle名称哪些事(20240125) 作者:胖头鱼的鱼缸(尹海文) Oracle A…...
驱动开发--多路复用-信号
一、多路复用 每个进程都有一个描述符数组,这个数组的下标为描述符, 描述符的分类: 文件描述符:设备文件、管道文件 socket描述符 1.1 应用层:三套接口select、poll、epoll select:位运算实现 监控的描…...
LeetCode 2859. 计算 K 置位下标对应元素的和【位操作】1000
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

composer安装hyperf后,nginx配置hyperf
背景 引入hyperf项目用作微服务,使用composer 安装hyperf后,对hyperf进行nginx配置。 配置步骤 因为hyperf监听的是端口,不像其他laravel、lumen直接指向文件即可。所有要监听端口号。 1 配置nginx server {listen 80;//http:…...
Flink对接Kafka的topic数据消费offset设置参数
scan.startup.mode 是 Flink 中用于设置消费 Kafka topic 数据的起始 offset 的配置参数之一。 scan.startup.mode 可以设置为以下几种模式: earliest-offset:从最早的 offset 开始消费数据。latest-offset:从最新的 offset 开始消费数据。…...

TryHackMe-Umbrella
靶场介绍 Breach Umbrella Corp’s time-tracking server by exploiting misconfigurations around containerisation. 利用集装箱化的错误配置,破坏Umbrella公司的时间跟踪服务器。 Task 1 What is the DB password? 数据库的密码是多少? 端口扫描&am…...

Excel导出警告:文件格式和拓展名不匹配
原因描述: Content-Type 原因:Content-Type,即内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件,这就是经常…...

kafka集群和Filebeat+Kafka+ELK
一、Kafka 概述 1.1 为什么需要消息队列(MQ) 主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多,从…...
golang map真有那么随机吗?——map遍历研究
在随机选取map中元素时,本想用map遍历的方式来返回,但是却并没有通过测试。 那么难道map的遍历并不是那么的随机吗? 以下代码参考go1.18 hiter是map遍历的结构,主要记录了当前遍历的元素、开始位置等来完成整个遍历过程 // A ha…...
详细分析对比copliot和ChatGPT的差异
Copilot 和 ChatGPT 是两种不同的AI工具,分别在不同领域展现出了强大的功能和潜力: GitHub Copilot 定位与用途:GitHub Copilot 是由GitHub(现为微软子公司)和OpenAI合作开发的一款智能代码辅助工具。它主要集成于Visu…...

TENT:熵最小化的Fully Test-Time Adaption
摘要 在测试期间,模型必须自我调整以适应新的和不同的数据。在这种完全自适应测试时间的设置中,模型只有测试数据和它自己的参数。我们建议通过test entropy minimization (tent[1])来适应:我们通过其预测的熵来优化模型的置信度。我们的方法估计归一化…...

研发日记,Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug
文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结 前言 见《研发日记,Matlab/Simulink避坑指南(一)——Data Store Memory模块执行时序Bug》 见《研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 见《…...

机器人3D视觉引导半导体塑封上下料
半导体塑封上下料是封装工艺中的重要环节,直接影响到产品的质量和性能。而3D视觉引导技术的引入,使得这一过程更加高效、精准。它不仅提升了生产效率,减少了人工操作的误差,还为半导体封装技术的智能化升级奠定了坚实的基础。 传统…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...