在现代汽车电子和工业控制系统中,CAN(Controller Area Network)总线技术因其高速、高可靠性而被广泛应用。Kvaser作为知名的CAN设备制造商,提供了丰富的CAN接口硬件产品及其相应的驱动和软件工具,以支持CAN网络的开发、测试和维护。 本安装包包含了Kvaser CAN设备的驱动程序,用户在Windows操作系统环境下,通过执行提供的安装程序,能够快速简便地完成驱动安装。安装完成后,用户便可以使用Kvaser硬件进行CAN网络的通信任务。 同时,该安装包还包含了模拟测试CAN通讯软件。这类软件允许用户在没有实际CAN硬件设备的情况下,模拟CAN总线通信环境,进行软件层面的测试和开发工作。这对于开发者来说是一个非常实用的功能,因为在开发阶段可能还没有足够的硬件资源进行测试,或者在某些场合需要进行远程故障诊断和模拟分析时,软件模拟测试工具便显得尤为重要。 驱动安装程序"kvaser_drivers_setup_5_45_724.exe"是Kvaser官方发布的驱动安装程序,其版本号为5.45.724。这个程序负责将Kvaser CAN设备的驱动安装到Windows系统中,并进行必要的配置,确保硬件设备能够被系统识别和正常工作。 模拟测试软件"kvaser_canking_setup_6_27_701.exe"则提供了版本号为6.27.701的模拟测试环境。该软件通过模拟真实的CAN网络通信,帮助工程师测试CAN总线上的设备通信协议实现、诊断通信问题、验证网络性能等。通过软件模拟,可以在没有真实物理CAN设备参与的情况下,对CAN网络进行设计验证,或者进行教学和培训等用途。 这个安装包对于那些在Windows环境下需要与Kvaser CAN设备打交道的工程师、开发者或研究人员来说,是一个非常实用的工具。它不仅能够帮助用户快速安装和配置硬件驱动,还能够提供一个强大的CAN通讯模拟测试环境,为CAN网络的开发和维护工作提供了极大的便利。
2025-08-11 16:22:45 18.56MB Can通讯
1
pixel7设备驱动文件
2025-07-31 20:42:01 432.95MB 驱动文件
1
基于Rust语言实现的2022年春季学期ucore操作系统实验教学项目_包含lab1-lab5五个实验模块_操作系统内核开发_进程管理_内存管理_文件系统_设备驱动_中断处理_系统.zip扣子COZE AI 编程案例 本文档是关于基于Rust语言实现的ucore操作系统实验教学项目,项目包含了五个实验模块,涉及操作系统内核开发的多个核心领域。Rust语言因其高效、安全的特性,被用于构建ucore操作系统,这是一个教学操作系统,旨在帮助学生深入理解操作系统底层原理。 五个实验模块包括: 1. 进程管理:在这个模块中,学生将学习如何在ucore中创建、调度和管理进程。进程管理是操作系统的核心功能,它涉及到进程的创建、终止、阻塞和唤醒等操作,以及进程间的同步和通信机制。 2. 内存管理:内存管理模块涵盖了虚拟内存的管理、物理内存的分配与回收、内存映射等知识点。这部分内容是理解操作系统如何高效利用物理内存的关键。 3. 文件系统:文件系统模块让学生有机会学习操作系统是如何组织和管理数据存储的。包括文件的创建、删除、读写操作,以及目录的管理。 4. 设备驱动:在设备驱动模块中,学生将接触到如何为操作系统编写设备驱动程序,这是连接硬件和软件的桥梁,学习如何控制和访问各种硬件设备。 5. 中断处理:中断处理模块涉及操作系统对硬件中断的响应机制。中断是操作系统处理各种事件,如输入输出请求、异常情况等的重要方式。 此外,文档中提到的“附赠资源.docx”可能是对实验指导或额外教学材料的文档,而“说明文件.txt”则可能包含项目的安装指南、使用说明或实验要求等。“OS_lab-master”是一个代码库,可能包含了实验项目的所有源代码和相应的实验指导。 Rust语言的引入为操作系统教学带来了新的视角。传统上,操作系统课程多使用C语言进行教学,因为C语言接近硬件,运行效率高。然而,Rust语言提供了内存安全保证,能够避免C语言中常见的内存错误,如空指针解引用、缓冲区溢出等。这使得学生在学习操作系统原理的同时,也能接触到现代编程语言的安全特性,从而更好地准备他们面对现代软件开发挑战。 Rust语言的引入还反映了操作系统课程与时俱进的趋势。随着技术的发展,操作系统越来越注重跨平台、安全性和并发性,Rust语言恰好满足了这些需求。通过使用Rust语言实现操作系统,学生能够更加深刻地理解操作系统的这些现代特性,并在未来的工作中更好地适应新的技术挑战。 该项目非常适合计算机科学与技术专业、软件工程专业以及对操作系统底层原理感兴趣的读者学习。学生通过实际编程实践,可以加深对操作系统核心概念的理解,比如进程、内存、文件系统的操作和管理,以及如何编写高效可靠的设备驱动和中断服务程序。 该项目是一个全面、系统的操作系统学习平台,它利用Rust语言的先进特性,为学生提供了一个安全、高效的学习环境,帮助他们全面掌握操作系统的设计和实现。
2025-07-28 20:53:41 46KB
1
1.2 样条曲线反算的一般过程 a)根据型值点的分布趋势,构造非均匀节点矢量. b)应用计算得到的节点矢量构造非均匀 B样条基. e)构建控制点反算的系数矩阵. d)建立控制点反算方程组,求解控制点列. 其中,B样条基函数的求值是关键. 1.2.1 假设规定 为使一 k次 B样条曲线通过一组数据点q (i:0,1,⋯,m),反算过程一般地使曲线的首末端点分 别和首末数据点一致 ,使曲线的分段连接点分别依次与 B样条曲线定义域内的节点一一对应.即q 点 有节点值 ( =0,1,⋯,m). ·1.2.2 三次 B样条插值曲线节点矢量的确定 曲线控制点反算时一般使曲线的首末端点分别与首末型值点一致,型值点P (i=0,1,⋯,凡)将 依次与三次 NURBS曲线定义域内的节点一一对应.三次NURBS插值曲线将由n+3个控制点 d (i= 0,1,⋯,n+2)定义,相应的节点矢量为 U = [ ,“ 一,u + ].为确定与型值点相对应的参数值 uⅢ (i=0,1,⋯,n),需对型值点进行参数化处理.选择 u 一般采取以下方法 : (1)均匀参数化法: 0=/.tl=u2=M3=0,u +3=i/n i:1,2,⋯ ⋯ ,n一1,M +3= +4= +5=u +6=1. (2)向心参数化法 : o= l= 2=“3=0, +3= +2+√Ip -p 一1 I/ ~/Ip -p 一1 l其中i=1,2,⋯,n一1. Mn+3 M +4:Mn+5 un+6 1. (3)积累弦长参数化法: uo=M1=u2:M3=0,u +3= +2+Ip —P — j l/ Ip 一P — l l 其中 =1,2,⋯,n一1. un+3: n+4:un+5 un+6 1. 1.2.3 反算三次 B样条曲线的控制顶点 给定 n+1个数据点p ,i=0,1,⋯,n.通常的算法是将首末数据点p。和P 分别作为三次B样 条插值曲线的首末端点,把内部数据点P ,P ,⋯,P 依次作为三次B样条插值曲线的分段连接点,则 曲线为 凡段.因此 ,所求的三次 B样条插值曲线的控制顶点b ,i=0,l,⋯,17,+2应为17,+3个.节 点矢量 U=[ 。, 一,“ + ],曲线定义域 “∈[u , +,].B样条表达式是一个分段的矢函数,并且由 于 B样条的局部支撑性,一段三次 B样条曲线只受 4个控制点的影响,下式表示了一段 B样条曲线的 一 个起始点:
2025-06-25 10:38:49 207KB 样条函数
1
**TivaWare库详解** TivaWare是一款专为C系列微控制器设计的外围设备驱动程序库,由Texas Instruments(TI)开发。这个库为开发者提供了简单、高效的接口,用于访问和控制C系列微控制器中的各种硬件资源。TivaWare库在嵌入式系统开发中扮演着重要角色,尤其在物联网(IoT)、工业自动化、消费电子等领域应用广泛。 **一、TivaWare库的核心特点** 1. **易用性**:TivaWare库通过提供简洁的API(应用程序编程接口),使得开发者能够快速上手,无需深入理解底层硬件细节。 2. **全面支持**:覆盖了C系列微控制器的各种外设,包括ADC(模数转换器)、DAC(数模转换器)、PWM(脉宽调制)、GPIO(通用输入输出)、UART(通用异步收发传输器)、SPI(串行外围接口)、I2C(集成电路间通信)等。 3. **实时性**:TivaWare库优化了中断处理,确保在实时操作系统环境下能够高效运行。 4. **可扩展性**:库的设计允许用户根据需要添加或修改功能,以适应特定项目的需求。 5. **错误检查**:包含丰富的错误处理机制,帮助开发者调试和定位问题。 6. **兼容性**:TivaWare库与TI的Code Composer Studio (CCS)集成开发环境无缝配合,简化了开发流程。 **二、TivaWare库的使用步骤** 1. **初始化**:需要对微控制器进行初始化,配置时钟、内存和其他必要的设置。 2. **选择外设**:根据项目需求,选择要使用的外设,并通过TivaWare库的API进行初始化。 3. **配置外设**:通过函数调用来配置外设参数,如波特率、数据位、停止位等。 4. **数据传输**:利用提供的函数进行数据读写操作,例如发送和接收UART数据。 5. **中断处理**:注册中断服务例程,处理来自外设的事件。 6. **错误检测和处理**:检查返回值,根据错误代码进行相应处理。 7. **关闭外设**:完成工作后,记得正确关闭外设以节省资源。 **三、C语言编程基础** TivaWare库是用C语言编写的,因此熟悉C语言是使用此库的前提。C语言是一种强大的、低级的编程语言,适合编写操作系统、嵌入式系统以及高效性能的应用程序。其主要特性包括: 1. **结构化编程**:C语言支持结构化编程,使得代码组织清晰,易于维护。 2. **内存管理**:C语言允许直接访问和管理内存,提供更高的灵活性。 3. **类型系统**:C语言有丰富的数据类型,如int、char、float等,便于表示不同类型的数据。 4. **指针**:C语言的指针是其强大之处,可以灵活地操作内存和函数。 5. **预处理器**:预处理器提供宏定义、条件编译等功能,方便代码复用和适应不同平台。 **四、开发环境与工具** 1. **Code Composer Studio (CCS)**:TI的集成开发环境,支持C和C++编程,集成了编译器、调试器和模拟器等功能。 2. **GCC编译器**:TI为C系列微控制器提供了基于GCC的编译工具链,可以与TivaWare库一起使用。 3. **硬件开发板**:如Energia LaunchPad系列,提供了C系列MCU的开发平台,可以方便地进行硬件实验。 通过理解并熟练运用TivaWare库,开发者可以充分发挥C系列微控制器的潜力,构建高效、稳定的嵌入式系统。同时,结合C语言的基础知识和适当的开发工具,可以大大提高开发效率,实现各种创新应用。
2025-06-04 11:34:14 5.2MB
1
《Linux设备驱动程序》是Linux驱动开发领域的一本权威指南,尤其在第三版中,它为读者提供了详尽且深入的Linux内核设备驱动程序开发知识。这本书是每一位致力于Linux驱动开发的工程师不可或缺的参考资料,它不仅有中文版,也有英文版,便于不同语言背景的开发者学习。此外,书中附带的所有例子源码可以供读者实际操作,加深理解。 Linux设备驱动程序的核心任务是作为操作系统与硬件之间的桥梁,使得操作系统能够有效地控制和管理硬件资源。驱动程序的编写涉及到Linux内核接口、I/O操作、中断处理、内存管理等多个方面。 1. **Linux内核接口**:驱动程序需要与Linux内核进行交互,这包括注册和注销设备,请求和释放资源,以及通过系统调用来实现设备操作。理解内核提供的函数和数据结构是编写驱动的关键,例如`register_chrdev`用于字符设备的注册,`ioremap`用于映射内存地址。 2. **I/O操作**:驱动程序需要处理设备的数据传输,这通常涉及到DMA(直接内存访问)和中断。例如,使用`read`和`write`系统调用实现字符设备的读写操作,或者通过配置DMA控制器进行高速数据传输。 3. **中断处理**:中断是硬件向处理器发送事件通知的主要方式。驱动程序需要设置中断处理程序,对中断请求进行响应。理解中断上下文、软中断和底半部(Bottom Half)的概念对于有效处理中断至关重要。 4. **内存管理**:在Linux系统中,驱动程序需要正确管理内存,包括分配、释放和共享内存。例如,`kmalloc`和`kfree`函数用于动态内存分配,而`get_user_pages`和`put_user_pages`则涉及用户空间和内核空间的内存交互。 5. **设备模型**:Linux内核提供了一种统一的设备模型,使得驱动程序能更好地组织和描述硬件。例如,`device`、`driver`和`bus`的概念,它们构成了设备驱动的基本框架。 6. **模块化编程**:Linux驱动程序往往以模块形式存在,可以动态加载和卸载。了解如何编写模块初始化和退出函数,以及如何使用`module_init`和`module_exit`宏是必要的。 7. **文件系统和块设备**:对于涉及文件操作的驱动,如硬盘驱动,需要理解VFS(虚拟文件系统)和具体的文件系统如EXT4的工作原理。同时,对于块设备,需要熟悉`request_queue`和I/O调度算法。 8. **例程分析**:ldd3_examples目录中的源代码实例涵盖了各种设备驱动的编写,如简单的字符设备驱动、网络设备驱动、PCI设备驱动等。通过分析这些例子,开发者可以逐步掌握驱动开发的实践技巧。 通过学习《Linux设备驱动程序》第三版,开发者不仅能掌握驱动程序的基本架构,还能深入了解Linux内核机制,从而更好地设计和优化设备驱动,提升系统的性能和稳定性。书中的每一个例子都是精心设计的实战练习,鼓励读者动手实践,从而真正掌握Linux驱动开发的精髓。
2025-05-18 16:03:33 2.64MB linux 设备驱动 代码
1
根据提供的文件信息,我们可以推断出这份材料主要关注的是Windows设备驱动程序WDF(Windows Driver Framework)的开发。下面将围绕这一主题展开详细介绍。 ### Windows设备驱动程序WDF开发 #### 一、WDF框架简介 Windows Driver Framework (WDF) 是一种用于编写设备驱动程序的软件框架,它为开发人员提供了更为高级且统一的接口来编写驱动程序。WDF旨在简化Windows平台上的设备驱动程序开发工作,并提高驱动程序的质量和可靠性。与传统的Windows驱动模型相比,WDF具有以下优势: - **简化编程模型**:WDF通过提供一套标准化的API来处理常见的驱动程序任务,如资源管理、电源管理和中断处理等,从而减少了开发者的工作量。 - **增强的可靠性和性能**:WDF框架内置了许多机制来帮助开发者避免常见的编程错误,比如内存泄漏和死锁等问题,同时也能更好地利用现代硬件特性来优化性能。 - **易于维护**:由于WDF提供了一套统一的编程模型,因此对于开发团队来说更容易维护和扩展驱动程序代码库。 #### 二、WDF的关键组件 WDF主要由两个核心组件构成:User-Mode Driver Framework (UMDF) 和 Kernel-Mode Driver Framework (KMDF)。 - **UMDF**:主要用于编写用户模式下的驱动程序。这类驱动程序通常用于连接到USB、串行端口或其他外部设备的应用程序。UMDF的优势在于能够减少内核空间的复杂性,并且在发生故障时不会导致系统崩溃。 - **KMDF**:用于编写运行在内核模式下的驱动程序。这类驱动程序通常用于处理更底层的操作,如直接访问硬件资源。KMDF提供了比UMDF更丰富的功能集,但也需要更多的专业知识来确保其正确性和稳定性。 #### 三、WDF的开发流程 开发WDF驱动程序的基本步骤包括: 1. **选择框架**:首先决定是使用UMDF还是KMDF来开发驱动程序。 2. **定义设备对象**:创建表示物理设备的设备对象,并配置其属性。 3. **实现设备操作**:实现设备对象支持的操作,例如读取、写入和控制。 4. **电源管理**:实现电源管理功能,确保设备在不同的电源状态下正常工作。 5. **错误处理**:处理可能出现的各种错误情况,确保驱动程序能够在遇到问题时优雅地恢复。 6. **测试和调试**:对驱动程序进行全面测试,包括静态分析、单元测试和集成测试等。 7. **签名和发布**:对驱动程序进行数字签名,并按照Microsoft的要求发布。 #### 四、WDF的学习资源 对于希望深入学习WDF开发的读者来说,可以参考以下资源: - **官方文档**:Microsoft官方提供了详尽的文档和教程,是学习WDF开发的首选资源。 - **书籍**:市面上有许多关于WDF开发的专业书籍,这些书籍通常包含了大量实践案例和最佳实践指南。 - **在线课程**:许多在线教育平台提供了WDF开发相关的视频课程,适合初学者入门。 - **社区和技术论坛**:加入相关的技术社区和技术论坛,与其他开发者交流经验和解决问题的方法。 WDF为Windows设备驱动程序的开发提供了一个强大的框架,极大地简化了开发过程并提高了驱动程序的质量。通过了解WDF的基本概念和开发流程,开发者可以更加高效地完成驱动程序的设计和实现。
2025-04-02 15:48:03 25.24MB Windows 设备驱动
1
FT5x06系列触摸屏在Linux下的设备驱动开发是一个重要的技术领域,涉及到嵌入式系统、硬件接口、操作系统内核以及人机交互等多个方面。本文将深入探讨该主题,以便帮助开发者理解并掌握相关知识。 "ft5x06_ts"是FT5x06系列触摸屏控制器的型号,由FocalTech公司生产,广泛应用于各种智能设备的触摸屏。这些控制器通过I2C或SPI接口与主机系统通信,提供触摸事件的数据。 在Linux系统中,设备驱动是连接硬件和操作系统内核的关键层。对于FT5x06这样的触摸屏控制器,驱动程序通常包含以下几个核心部分: 1. **初始化代码**:负责设置硬件接口,如配置I2C或SPI总线,并检测设备是否存在。 2. **数据读取/写入**:实现从触摸屏控制器读取触摸数据和向其发送配置命令的功能。这通常涉及I2C或SPI协议的实现。 3. **中断处理**:当触摸事件发生时,控制器会触发中断,驱动程序需要注册中断处理函数来响应这些事件。 4. **设备节点创建**:在/dev目录下创建设备节点,使得用户空间应用程序可以通过标准的文件操作接口访问驱动。 5. **触摸事件处理**:将接收到的原始触摸数据转换为Linux输入子系统的格式,如座标、压力等,然后通过input子系统上报给系统。 在描述中提到的"5406参考驱动程序"可能是指FT5406的官方驱动,这是一个常见的触摸屏控制器,可以为编写FT5x06驱动提供参考。"ft5x06_ts厂家参考程序"可能包含了FocalTech提供的特定于该芯片的示例代码,有助于理解硬件特性和驱动设计。而"S5PV210触摸屏驱动完整代码"则可能是针对三星S5PV210处理器优化过的驱动,可以直接用于该平台。 标签中的"linux lcd"表明驱动可能还包含了与LCD显示器的集成,这可能涉及到LCD控制器的初始化、帧缓冲管理以及如何同步触摸事件和屏幕显示。 压缩包内的文件"ft5x06_ts触摸屏Linux设备驱动代码"很可能是整个驱动程序的源代码,包含了上述所有组件。开发者可以分析这个代码来学习如何构建一个完整的Linux触摸屏驱动,包括读取触摸数据、解析触摸事件以及与上层应用的交互。 理解和开发FT5x06系列触摸屏的Linux驱动需要熟悉Linux内核机制、I2C或SPI通信协议,以及对触摸屏硬件的工作原理有深入了解。通过研究提供的驱动代码,开发者可以提升在嵌入式Linux系统中实现高效、稳定触摸屏驱动的能力。
2025-04-02 14:52:06 40KB linux
1
### Tsi721 Windows 设备驱动和API用户参考指南(中文版)知识点解析 #### 一、概览 本文档旨在为熟悉RapidIO规范的软件开发人员提供关于Tsi721 Windows设备驱动程序及其API的详细介绍。文档不仅涵盖了驱动程序的基本信息,还深入探讨了API的功能和使用方法,并提供了具体的代码示例。 #### 二、Tsi721 设备驱动程序包 ##### 1. 组件构成 Tsi721 Windows设备驱动程序包包含了以下几个关键部分: - **内核模式设备驱动程序**:适用于Windows 7(32位和64位)及Windows XP的操作系统。该驱动程序以二进制文件的形式提供(`tsi721.sys`),确保与不同版本的Windows操作系统兼容。 - **用户模式API DLL**:名为`tsi721_api.dll`的动态链接库,用于简化设备驱动程序的访问和使用过程。 - **代码示例**:提供了两个示例项目来展示如何使用API。 - **第一个示例**:针对Tsi721评估板,但也可以轻松应用于用户的自定义配置。此示例还包含了使用Tsi721评估板进行测试的预构建二进制文件。 - **第二个示例**:适用于两个直接通过S-RIO链路连接的Tsi721设备。 - **自述文件**:提供关于更新和最后时刻文档变更的信息。 - **Tsi721 Windows设备驱动程序和API文档**:即本文档,包含了详细的驱动程序和API信息。 ##### 2. 版本历史 - **2013年10月30日**:发布了小更新,以改进Tsi721设备驱动程序包。 - **2013年5月6日**:更新了API参数的解释,并增加了新的测试代码示例。 - **2013年3月25日**:首次发布。 #### 三、Tsi721 设备驱动程序 ##### 1. 驱动程序概述 Tsi721设备驱动程序是专门为Windows设计的内核模式驱动程序,使用了Microsoft Windows内核模式驱动程序框架。由于Tsi721硬件和通用RapidIO互连架构的特点,该驱动程序提供了专门的IOCTL功能,以适应RapidIO架构的特殊需求,例如数据传输到RapidIO端点等操作。传统的读写接口并不适用于此类架构。 ##### 2. 功能特性 - **支持重叠I/O请求**:允许并发执行多个I/O操作。 - **多并行请求队列**:提供异步事件通知与同步数据传输和寄存器访问操作相结合的能力。 - **设备特定的IOCTL代码**:支持以下操作: - 对PCI Express配置空间中的本地Tsi721寄存器进行读/写访问。 - 对PCI Express I/O内存空间中的本地Tsi721寄存器进行读/写访问。 - 从远程S-RIO设备的CSR进行维护读/写操作(使用Tsi721 BDMA通道)。 - 从连接到RapidIO结构的远程端点进行寻址数据读/写操作(使用Tsi721 BDMA通道的NREAD、NWRITE、SWRITE)。 - 向/从RapidIO端点发送和接收门铃通知。入站门铃队列大小配置为最多存储512个条目。 - 发送和接收RapidIO邮箱消息(MBOX0–MBOX3)。入站消息传递仅支持具有匹配目标ID的消息队列。 - 将入站RapidIO内存地址映射到本地系统内存缓冲区。 - 从连接的RapidIO结构组件(交换机和端点)接收端口写入通知。 ##### 3. 不支持的功能 - **PCI Express到S-RIO内存映射窗口**:不支持的原因在于对于失败请求的错误处理具有挑战性,需要实现自定义机器检查处理程序。 - **具有不匹配目标ID的消息的入站消息队列**:不支持此类队列。 ##### 4. 与Linux内核RapidIO支持的区别 - **服务级别差异**:熟悉Linux内核RapidIO子系统的用户可能会注意到,Windows下的Tsi721设备驱动程序提供的服务级别与Linux不同。Windows操作系统本身并未提供对RapidIO的支持,因此用户需要自己实现S-RIO结构管理功能,例如枚举和发现、错误管理初始化和路由设置等功能。 #### 四、应用程序接口(API) ##### 1. API概述 Tsi721用户模式API DLL(`tsi721_api.dll`)提供了高级别的接口,使得开发者能够更加方便地与Tsi721设备交互。该API简化了设备驱动程序的访问和使用过程,包括但不限于寄存器读写、数据传输等功能。 ##### 2. 使用方法 - **代码示例**:文档中包含了多个示例项目,旨在帮助开发者理解API的使用方式。 - **API文档**:详细介绍了每个API函数的参数、返回值以及使用注意事项。 #### 五、结论 Tsi721 Windows设备驱动程序和API用户参考指南为开发者提供了全面的指导和支持,以确保他们能够有效地利用Tsi721设备的各项功能。通过对驱动程序和API的深入了解,开发者可以更好地集成Tsi721设备到他们的应用中,从而实现更高效的数据处理和通信。
2025-04-02 11:05:29 1.3MB windows
1
usb hub carplay host to host carpay mfi iap 设备 hub carplay linux 设备驱动
2024-10-28 11:16:41 33KB linux
1