E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
RK3288驱动开发
嵌入式Linux
驱动开发
(I2C专题)(三)
无需编写驱动直接访问设备_I2C-Tools介绍参考资料:Linux驱动程序:drivers/i2c/i2c-dev.cI2C-Tools-4.2:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/AP3216C:gitclonehttps://e.coding.net/weidongshan/01_all_series_qu
嵌入式学习者。
·
2023-09-14 10:43
Linux
驱动以及裸机
linux
驱动开发
运维
linux
驱动开发
--day4(字符设备驱动注册内部流程、及实现备文件和设备的绑定下LED灯实验)
一、字符设备驱动注册的内部过程1.分配structcdev对象空间2.初始化structcdev对象3.注册cdev对象二、注册字符设备驱动分步实现1.分配字符设备驱动对象2.字符设备驱动对象初始化3.设备号的申请4.根据申请的设备号和驱动对象注册驱动三、open函数回调驱动中操作方法open的路线1.应用层打开文件系统中的存在文件,会有inode号,且系统内核中就会存在一个inode对象(str
林黛玉倒拔垂杨柳~
·
2023-09-14 10:12
驱动开发
stm32
linux
驱动开发
--字符设备驱动的实现
一、字符设备驱动内部注册过程通过对register_chrdev内部的实现过程进行分析,其实注册字符设备驱动的过程就是下面几步:1.分配structcdev对象空间2.初始化structcdev对象3.注册cdev对象完成上面的三步,就完成了字符设备驱动的注册。二、通过字符设备驱动分步注册方式编写LED驱动,完成设备文件和设备的绑定头文件#ifndef__HEAD_H__#define__HEAD
consumer.
·
2023-09-14 02:39
驱动开发
驱动开发
DAY4
驱动代码#include#include#include#include#include#include#include#include#include"head.h"dev_tdevno;//存放申请的到的设备号的空间首地址unsignedbaseminor;//次设备号的起始值unsignedcount;//申请的设备资源数量structcdev*cdev;//申请的字符设备驱动对象指针cha
工控菜鸟转嵌入式
·
2023-09-13 21:11
驱动开发
嵌入式Linux
驱动开发
(I2C专题)(二)
I2C系统的重要结构体参考资料:Linux驱动程序:drivers/i2c/i2c-dev.cI2CTools:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/1.I2C硬件框架2.I2C传输协议3.Linux软件框架4.重要结构体使用一句话概括I2C传输:APP通过I2CController与I2CDevice传输数据。在
嵌入式学习者。
·
2023-09-13 20:22
Linux
驱动以及裸机
linux
驱动开发
运维
嵌入式Linux
驱动开发
(I2C专题)(一)
一、I2C协议1.1、硬件连接I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备。1.2、IIC传输数据的格式1.2.1、写操作流程如下:主芯片要发出一个start信号然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)从设备回应(用来确定这个设备是否存在),然后就可以传输数据主设备发送一个字节数据给从设备,
嵌入式学习者。
·
2023-09-13 20:20
Linux
驱动以及裸机
linux
驱动开发
运维
驱动开发
--自动创建设备节点udev机制的实现过程
一、udev的认识udev:自动创建设备节点的机制,创建设备节点的逻辑在用户空间二、udev机制创建设备节点的过程分析三、目录信息创建和删除类函数#include1.向上提交目录信息structclass*class_create(structmodule*owner,constchar*name);功能:申请一个设备类并初始化,向上提交目录信息参数:参数1:owner:指向当前内核模块自身的一个
consumer.
·
2023-09-13 18:44
驱动开发
linux
驱动开发
---day3(自启动创建设备节点进行点灯实验、ioctl函数实现点灯实验)
自动创建设备节点udev机制的实现过程udev是自动创建设备节点,逻辑在用户空间过程:1)首先注册字符设备驱动,得到标识设备的设备号2)获得设备信息后,先创建一个设备类,向上提交目录信息,使用class_create3)然后创建设备对象,向上提交设备节点信息,使用device_create4)在向上提交设备节点信息后,会自动发起热插拔事件通知udev进程去查询设备节点的信息,以及在/dev下创建设
林黛玉倒拔垂杨柳~
·
2023-09-13 04:41
linux
stm32
驱动开发
驱动开发
--自动创建节点udev机制的实现过程分析
一,创建设备文件的机制1,mknod:手动创建设备节点2,devfs:创建设备节点的逻辑在内核空间,2.5版本后淘汰3,udev:自动创建设备节点的机制,逻辑在用户空间,常用4,mdev:轻量级的udev机制二,udev创建设备节点的过程分析1,注册驱动,register_chrdev()函数2,获取设备信息(设备树相关文件,目前为指定寄存器地址)3,创建一个设备类(向上提交目录信息),会在内核中
_天高地厚_
·
2023-09-12 23:48
驱动开发
驱动开发
linux
ubuntu
嵌入式硬件
驱动开发
作业 day3 9/8
实现三盏灯点亮head.h#ifndef__HEAD_H__#define__HEAD_H__#defineLED1_MODER0X50006000#defineLED1_ODR0x50006014#defineLED1_RCC0x50000A28#defineLED2_MODER0X50007000#defineLED2_ODR0x50007014#defineLED2_RCC0x50000A2
qq_56558010
·
2023-09-12 21:42
驱动开发
驱动开发
day3 9/12
udev机制创建设备文件实现过程1.驱动注册通过内核提供的驱动注册api获取设备号,为创建设备文件提供设备号2.创建设备类通过内核提供的class_create()创建一个设备类,向上提交目录信息:构造structclass变量并初始化,创建一个设备类的目录:/sys/class/类名API:structclass*class_create(structmodule*owner,constchar
qq_56558010
·
2023-09-12 21:39
驱动开发
RobotFrameWork自动化测试环境搭建
主要用于轮次很多的验收测试和验收测试
驱动开发
(ATDD),支持python,java等编程语言(百度百科)。
测试界的扛把子
·
2023-09-12 20:48
软件测试
技术分享
单元测试
测试工具
如何在Spring Boot中使用TDD写出高质量的接口
之前在《如何说服你的同事使用TDD》中介绍了为什么要使用TDD(测试
驱动开发
),以及如何使用TDD写代码。
柳树之
·
2023-09-12 16:48
嵌入式Linux
驱动开发
(同步与互斥专题)(二)
一、自旋锁spinlock的实现自旋锁,顾名思义:自己在原地打转,等待资源可用,一旦可用就上锁霸占它。①原地打转的是CPUx,以后CPUy会解锁:这涉及多个CPU,适用于SMP系统;②对于单CPU系统,自旋锁的“自旋”功能就去掉了:只剩下禁止抢占、禁止中断要理解spinlock,要通过2个情景来分析:①一开始,怎么争抢资源?不能2个程序都抢到。这挺好解决,使用原子变量就可以实现。②某个程序已经获得
嵌入式学习者。
·
2023-09-12 12:22
Linux
驱动以及裸机
linux
驱动开发
运维
嵌入式Linux
驱动开发
(同步与互斥专题)(一)
一、内联汇编1.1、语法内联汇编实现加法1.2、同步互斥失败的例子进程A在读出valid时发现它是1,减1后为0,这时if不成立;但是修改后的值尚未写回内存;假设这时被程序B抢占,程序B读出valid仍为1,减1后为0,这时if不成立,最后成功返回;轮到A继续执行,它把0值写到valid变量,最后也成功返回。这样程序A、B都成功打开了驱动程序。1.3、原子操作的原理与使用所谓“原子操作”就是1.2
嵌入式学习者。
·
2023-09-12 12:21
Linux
驱动以及裸机
linux
驱动开发
运维
RK3288
Debian/Ubuntu系统rootfs镜像定制打包
文章目录前言打包环境安装QEMUrootfs系统文件提取配置QEMU创建根文件系统脚本切换到新系统根目录安装所需要的软件包创建新镜像制作新镜像修复新镜像参考文献前言近来开始接触ARM版,了解到瑞芯微
RK3288
Alderaan
·
2023-09-12 02:18
RK3288
ubuntu
RK3288
瑞芯微
linux
rootfs
rockchip
TDD开发
一个好的开发习惯,应该是测试
驱动开发
,也就是常说的TDD。单元测试说了这么久,看起来好像都会了,但其实真正要做到高可用还是比较难的。在此记录一下心得。
炼丶金
·
2023-09-11 16:38
驱动开发
,stm32mp157a开发板的led灯控制实验
1.实验目的编写LED灯的驱动,在应用程序中编写控制LED灯亮灭的代码逻辑实现LED灯功能的控制;2.LED灯相关寄存器分析LED1->PE10LED1亮灭:RCC寄存器[4]->10X50000A28GPIOE_MODER[21:20]->01(输出)0X50006000GPIOE_ODR[10]->1(输出高电平)0(输出低电平)0X50006014LED2->PF10LED2亮灭:RCC寄存
ai加班的嵌入者
·
2023-09-11 11:37
驱动开发
驱动开发
stm32
嵌入式硬件
嵌入式 LINUX
驱动开发
day01 第一个内核模块程序 多文件编译为一个程序, 内核模块参数, 内核模块依赖
1.第一个内核模块程序(记得配置自己的交叉编译的工具,)首先两个文件vser.cMakefile(记得大写的M)vser.c#include//内核初始化头文件#include//内核模块文件#include//linux内核/**********自定义初始化函数***********/staticint__initvser_init(void)/*__init说明要将该函数放到EIF文件__in
_She001
·
2023-09-11 06:28
linux
驱动开发
驱动开发
linux
运维
驱动开发
day3
头文件:#ifndef__LED_H__#define__LED_H__#definePHY_GPIOE0x50006000#definePHY_GPIOF0x50007000#definePHY_RCC0x50000A28typedefstruct{volatileunsignedintMODER;volatileunsignedintOTYPER;volatileunsignedintOSPE
疯狗Crazydo
·
2023-09-11 06:55
驱动开发
arm
嵌入式硬件
STM32MP157系统驱动:LED
驱动开发
LED
驱动开发
编程实现灯的亮灭hello.hmycdev_led.cmakefilemain.c程序的自动化实现hello.h#ifndef__HEAD_H__#define__HEAD_H__//LED1
#_404_Not_Found_#
·
2023-09-11 06:55
stm32
c语言
嵌入式硬件
驱动开发
嵌入式:
驱动开发
Day2
作业:字符设备驱动,完成三盏LED灯的控制驱动代码:mychrdev.c#include#include#include#include#include#include"head.h"unsignedintmajor;//保存主设备号charkbuf[128]="";unsignedint*vir_moder_e;unsignedint*vir_odr_e;unsignedint*vir_rcc_
去码头搞搞嵌入式
·
2023-09-11 06:53
驱动开发
ImportError: libhdf5_serial.so.100: cannot open shared object file: No such file or directory
记录贴环境:
RK3288
UbuntuPython3.51.使用命令安装opencv-contrib-python:pip3installopencv-contrib-python==3.3.0.9-ihttps
XingXingYeGuDu
·
2023-09-10 23:30
python
python
linux
opencv
平台总线框架,platform总线驱动(名称匹配、ID匹配、设备数匹配)
一、总线、设备、驱动硬编码式的
驱动开发
带来的问题:垃圾代码太多结构不清晰一些统一设备功能难以支持开发效率低下1.1初期解决思路:设备和驱动分离structdevice来表示一个具体设备,主要提供具体设备相关的资源
一条飞的鱼儿
·
2023-09-10 21:13
单片机
嵌入式硬件
linux
input子系统框架、外设
驱动开发
等等)的
驱动开发
统一输入类外设产生的数据格式(structinput_event),更加方便应用层编程设计了输入子系统事件处理层:接收来自核心层上报的事件,并选择对应的handler(事件处理器structinput_handler
一条飞的鱼儿
·
2023-09-10 21:43
驱动开发
linux
嵌入式硬件
实施Microsoft Dynamics 365 CE-2. 实施方法,解释不同的项目实施方法。
我们还将了解不同的、常用的项目管理方法,如瀑布、敏捷、Scrum、功能
驱动开发
、DevOps和MicrosoftSureStep及其阶段。
Martin-Mei
·
2023-09-10 10:39
实施Microsoft
Dynamics
365
CE
microsoft
c#
第19章 并发与竞争实验(iTOP-RK3568开发板
驱动开发
指南 )
在前面章节的学习中,相信大家已经对用户空间与内核空间数据传递进行了实验,假如要传递的数据被存放在了全局变量,该数据就可以作为共享资源被多个任务共同读写,从而造成数据的错误传输,多个程序同时访问一个共享资源产生的问题就叫做竞争。竞争产生的根本原因就是Linux系统的并发访问。在本章节中首先会对并发与并行的概念进行讲解,随后对竞争产生的原因进行总结,最后以一个实际的竞争实验加深大家的理解。下面就让我们
北京迅为
·
2023-09-10 10:35
驱动开发
Android EditText setTranslationY导致输入法覆盖问题
平台
RK3288
+Android8.1显示:1920x1080@160dpi概述碰到一个问题:弹出的输入法会覆盖文本输入框。
ansondroider
·
2023-09-10 08:50
android
android
输入法
EditText
焦点
setTranslationY
android关闭触摸提示音,修改Android系统的触摸提示音【学习笔记】
平台信息:内核:Linuxversion3.10.0系统:android/android6.0平台:
rk3288
作者:庄泽彬(欢迎转载,请注明作者)邮箱:
[email protected]
本文是基于Android6.0
hanzmins
·
2023-09-10 02:46
android关闭触摸提示音
第20章 原子操作实验(iTOP-RK3568开发板
驱动开发
指南 )
在上一章节的实验中,对并发与竞争进行了实验,两个app应用程序之间对共享资源的竞争访问引起了数据传输错误,而在Linux内核中,提供了四种处理并发与竞争的常见方法,分别是原子操作、自旋锁、信号量、互斥体,在之后的几个章节中会依次对上述四种方法进行讲解。本章首先对四种常见方法中的原子操作进行讲解。20.1原子操作“原子”是化学世界中不可再分的最小微粒,一切物质都由原子组成。在Linux内核中的原子操
北京迅为
·
2023-09-09 15:02
驱动开发
第22章 自旋锁死锁实验(iTOP-RK3568开发板
驱动开发
指南 )
在上一小节中,学习了内核中自旋锁的使用,而自旋锁若是使用不当就会产生死锁,在本章将会对自旋锁的特殊情况-死锁进行讲解。22.1自旋锁死锁死锁是指两个或多个事物在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。当多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进,这种情况就是死锁。自旋锁死锁发生存在两种情况:(1)第一种情况是拥有自旋锁的进程A在
北京迅为
·
2023-09-09 14:02
驱动开发
第24章 互斥锁实验(iTOP-RK3568开发板
驱动开发
指南 )
在上一章节中对信号量进行了学习,而本章节要学习的互斥锁可以说是“量值”为1的信号量,最终实现的效果相同,既然有了信号量,那为什么还要有互斥锁呢,带着疑问,让我们来进行本章节的学习吧!24.1互斥锁在上一章节中,将信号量量值设置为1,最终实现的就是互斥效果,与本章节要学习的互斥锁功能相同,虽然两者功能相同但是具体的实现方式是不同的,但是使用互斥锁效率更高、更简洁,所以如果使用到的信号量“量值”为1,
北京迅为
·
2023-09-09 14:02
驱动开发
第21章 自旋锁实验(iTOP-RK3568开发板
驱动开发
指南 )
在上一节中对原子操作进行了讲解,并使用原子整形操作对并发与竞争实验进行了改进,但是原子操作只能对整形变量或者位进行保护,而对于结构体或者其他类型的共享资源,原子操作就力不从心了,这时候就轮到自旋锁的出场了,下面就让我们一起来进行自旋锁的学习吧。21.1自旋锁自旋锁是为了保护共享资源提出的一种锁机制。自旋锁(spinlock)是一种非阻塞锁,也就是说,如果某线程需要获取锁,但该锁已经被其他线程占用时
北京迅为
·
2023-09-09 14:32
驱动开发
第23章 信号量实验(iTOP-RK3568开发板
驱动开发
指南 )
在上面两个章节对自旋锁和自旋锁死锁进行了学习,自旋锁会让请求的任务原地“自旋”,在等待的过程中会循环检测自旋锁的状态,进而占用系统资源,而本章节要讲解的信号量也是解决竞争的一种常用方法,与自旋锁不同的是,信号量会使等待的线程进入休眠状态,适用于那些占用资源比较久的场合。下面对信号量相关知识的进行讲解。23.1信号量信号量是操作系统中最典型的用于同步和互斥的手段,本质上是一个全局变量,信号量的值表示
北京迅为
·
2023-09-09 14:31
驱动开发
Linux I2C设备驱动基本规范
不同于单片机
驱动开发
,即使是简单的I2C设备驱动程序,如果要在Linux上实现同种功能的驱动程序,事情也会变的复杂起来。
奔跑的码仔
·
2023-09-09 09:37
ARM-linux
Linux
kernel
设备树编程实践
linux
I2C
设备驱动
firefly-
rk3288
j开发板--linux I2C实验之eeprom驱动
firefly-
rk3288
j开发板–linuxI2C实验之eeprom驱动1准备工作开发板:aio-
rk3288
jSDK版本:
rk3288
_linux_release_20210304下载工具:Linux_Upgrade_Tool_v2.1
林深见麋鹿
·
2023-09-09 09:06
Firefly
RK3288平台
linux
运维
服务器
rk3288
i2c-tools使用
i2c-tools源码下载Linux驱动程序:drivers/i2c/i2c-dev.cI2C-Tools-4.2:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/AP3216C:在gitclonehttps://e.coding.net/weidongshan/01_all_series_quickstart.git,在1
习惯就好zz
·
2023-09-09 09:35
#
I2C
i2c
i2c-tools
linux
kernel
100ask
rk3288
android7 通过SD卡烧录失败
把卡插入
rk3288
主板中,通过SD烧写。
Mr.云舒
·
2023-09-09 09:09
RK3288
【深入理解Linux内核锁】七、互斥体
我的圈子:高级工程师聚集地我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux
驱动开发
和系统开发,曾就职于世界500强企业!创作理念:专注分享高质量嵌入式文章,让大家读有所得!
卍一十二画卍
·
2023-09-08 16:19
深入理解Linux驱动程序开发
#
Linux内核锁
linux
Linux驱动开发
Linux内核锁
嵌入式硬件
ubuntu
linux设备
驱动开发
学习--内存和IO访问
一I/O端口1.读写字节端口(8位宽)unsignedinb(unsignedport);voidoutb(unsignedcharbyte,unsignedport);2.读写字端口(16位宽)unsignedinw(unsignedport);voidoutw(unsignedshortword,unsignedport);3.读写长字端口(32位宽)unsignedinl(unsignedp
Rocky_zhm
·
2023-09-08 14:15
驱动开发
驱动开发
嵌入式Linux
驱动开发
(LCD屏幕专题)(三)
1.硬件相关的操作LCD驱动程序的核心就是:分配fb_info设置fb_info注册fb_info硬件相关的设置硬件相关的设置又可以分为3部分:引脚设置时钟设置LCD控制器设置2.在设备树里指定LCD参数framebuffer-mylcd{compatible="100ask,lcd_drv";pinctrl-names="default";pinctrl-0=;backlight-gpios=;
嵌入式学习者。
·
2023-09-08 10:20
Linux
驱动以及裸机
linux
驱动开发
运维
嵌入式Linux
驱动开发
(LCD屏幕专题)(四)
单Buffer的缺点与改进方法1.单Buffer的缺点如果APP速度很慢,可以看到它在LCD上缓慢绘制图案即使APP速度很高,LCD控制器不断从Framebuffer中读取数据来显示,而APP不断把数据写入Framebuffer假设APP想把LCD显示为整屏幕的蓝色、红色很大几率出现这种情况:LCD控制器读取Framebuffer数据,读到一半时,在LCD上显示了半屏幕的蓝色这是APP非常高效地把
嵌入式学习者。
·
2023-09-08 10:20
Linux
驱动以及裸机
linux
驱动开发
运维
第3章 helloworld 驱动实验(iTOP-RK3568开发板
驱动开发
指南 )
在学习C语言或者其他语言的时候,我们通常是打印一句“helloworld”来开启编程世界的大门。学习驱动程序编程亦可以如此,使用helloworld作为我们的第一个驱动程序。接下来开始编写第一个驱动程序—helloworld。3.1驱动编写本小节来编写一个最简单的驱动——helloworld驱动。helloworld.c如下(图3-1)所示代码:#include#includestaticint_
北京迅为
·
2023-09-08 10:20
驱动开发
【IMX6ULL
驱动开发
学习】24.关于mmap为什么能直接操作LCD显示
记录今天面试中遇到的一个提问,当时没有答上来感谢面试官(弓总)的提问,让我认识到了目前的不足,下午又深入的学习了一下,在这里做一下补充mmap为什么能直接操作LCD显示首先在内核空间申请一段或多段内存作为显存,即Framebuffer然后使用mmap把这段内存的物理地址映射到应用程序的地址空间相当于应用中也有一块内存,这两块内存的虚拟地址不一样(一个虚拟地址是内核空间的,一个是用户空间的),但是对
晨少爱学习
·
2023-09-08 10:20
IMX6ULL
驱动开发
mmap
Android Netd
Android-NETD解读Netd服务注册过程(Android10)Android4.1Netd详细分析(一)概述与应用实例[
RK3288
][Android6.0]网络服务Netd初始化流程小结Linux
greatwgb
·
2023-09-08 07:50
网络协议
android
Linux
驱动开发
主设备号和次设备号主设备号区分不同种类的设备次设备号区分同一类型不同的设备Linux的驱动链表会管理这些设备驱动1.添加(编写完驱动程序加载到内核)2.查找(调用驱动程序,用户层去调用open)驱动插入链表的顺序由设备号检索2.
驱动开发
驱动的开发就是添加驱动和调用驱动添加驱动
C有点难。
·
2023-09-08 07:15
Linux
驱动开发
linux
驱动开发
--day2
实现三盏灯的控制,编写应用程序测试head.h#ifndef__HEAD_H__#define__HEAD_H__#defineLED1_MODER0X50006000#defineLED1_ODR0X50006014#defineLED1_RCC0X50000A28#defineLED2_MODER0X50007000#defineLED2_ODR0X50007014#endifmychrdev
林黛玉倒拔垂杨柳~
·
2023-09-08 01:02
驱动开发
c语言
stm32
全志A133成长录
文章目录前言前言1.本专栏主要是记录使用全志A133开发过程的经验和bug2.主要是针对
驱动开发
,不定期更新3.后期会把目录更新到本文中。
不知道起个啥名“”
·
2023-09-08 00:28
A133
A133
驱动开发
linux
驱动开发
--day1(驱动、内核模块及相关命令、内核模块传参)
#include#includeinta=10;module_param(a,int,0664);MODULE_PARM_DESC(a,"thisisavalue");charb=97;module_param(b,byte,0664);MODULE_PARM_DESC(b,"thisisachar");char*c="hi";module_param(c,charp,0664);MODULE_P
林黛玉倒拔垂杨柳~
·
2023-09-07 11:56
linux
驱动开发
c语言
嵌入式Linux
驱动开发
(LCD屏幕专题)(二)
一、结合APP分析LCD驱动程序1、openapp:open("/dev/fb0",...)主设备号:29,次设备号:0--------------------------------------------------------------kernel:fb_open//fbmem.cstructfb_info*info;info=get_fb_info(fbidx);if(info->fbo
嵌入式学习者。
·
2023-09-07 11:23
Linux
驱动以及裸机
linux
驱动开发
运维
上一页
18
19
20
21
22
23
24
25
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他