linux驱动开发之不惑篇

        藏在岁月里的故事,终将与月光和花香一起,酿成淳淳的酒,芬芳后来的岁月,无论哪一种生活,希望你始终在回望时,记忆里有淡淡的花香。

                                                                                                                                           ----小新

一.交叉编译器

        交叉编译器主要是解决程序移植的问题,比如:
        在 linux 上写 了一个 c 程序 heollo world, 使用 gcc 编译器进行代码的编译,编译得到的可执行 文件只能在 X86 结构的 PC 上运行 ,然后运行下可执行文件,这个可执行文件是可以在 PC 上运行的。如下图所示。

        然后我们使用 file 命令来看下这个文件,这个文件是可以在 X86 上运行的,但是它不能在 ARM 上运行, 因为它这里写的是 X86 。如下图所示。
        如果我们想在 ARM 上运行,就要使用 ARM 的编译器,然后在 X86 上进行编译。因为我们使用 ARM 的 编译器编译完了之后,是把我们的可执行程序放到开发板上来运行,而不是在 PC 上运行的,这个过程大家 可以把它理解成交叉,然后再和我们的编译器结合起来就叫做交叉编译器。交叉编译器的种类有很多,我 们 使 用 的 是 Linaro 公 司 的 arm 交 叉 编 译 器 , 这 是 交 叉 编 译 器 的 地 址 , https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/

二.makefile的编写 

        Makefile 就是描述了整个工程编译连接等规则的文件。我们在终端输入完 make 命令之后,调用 make 工具,make 就会在当前目录按照文件名就会找 makefile 文件, Makefile 的命名必须是 makefile 或 Makefile , m 大写小写都是可以的。

目标: all hello.c
依赖: hello.o hello.c
命令: gcc hello.c -o hello gcc -c hello.c

 

 三.linux驱动开发的常用命令

  1. ls:显示当前目录的内容。例如,ls -l可以列出当前目录的详细列表。
  2. cd:切换当前目录。例如,cd /home/user可以进入/home/user目录。
  3. pwd:显示当前工作目录的路径。
  4. mkdir:创建一个新的目录。例如,mkdir mydir可以创建一个名为mydir的新目录。
  5. touch:创建一个新的空文件或更新一个已存在的文件。例如,touch file.txt可以创建一个名为file.txt的空文件。
  6. rm:删除一个文件或目录。例如,rm file.txt可以删除名为file.txt的文件。
  7. cp:复制一个文件或目录。例如,cp file1.txt file2.txt可以将file1.txt复制为file2.txt。
  8. mv:移动一个文件或目录。例如,mv file1.txt /home/user可以将file1.txt移动到/home/user目录下。
  9. cat:显示一个文件的全部内容。例如,cat file.txt可以显示file.txt文件中的全部内容。
  10. more:逐页显示一个文件的内容。例如,more file.txt可以逐页显示file.txt文件的内容。
  11. less:与more类似,但是可以进行向前翻页等操作。例如,less file.txt可以以交互方式显示file.txt文件的内容。
  12. find:查找文件或目录。例如,find /home/user -name "*.txt"可以查找/home/user目录下所有扩展名为.txt的文件。
  13. grep:在文件中查找匹配的字符串模式。例如,grep "hello" file.txt可以在file.txt文件中查找包含"hello"的行。
  14. insmod:这是插入模块的命令,用于将编译好的驱动程序加载到内核中。需要指定驱动程序的路径和名称,如insmod /path/to/driver.ko。
  15. rmmod:这是删除模块的命令,用于从内核中卸载驱动程序。需要指定驱动程序的名称,如rmmod driver。
  16. lsmod:这个命令用于列出当前系统中已经加载的模块。通过该命令可以观察哪些模块已经加载,并可以获取关于已加载模块的信息,如大小、使用计数等。
  17. modinfo:这个命令用于显示指定模块的信息,包括模块的名称、版本、参数等。需要指定模块的路径和名称,如modinfo /path/to/driver.ko。
  18. read:这是从文件描述符中读取数据的命令。在驱动程序中,可以使用read命令从设备文件中读取数据,并将数据传递给用户空间。
  19. write:这是向文件描述符中写入数据的命令。在驱动程序中,可以使用write命令将数据从用户空间传递到设备文件中。
  20. mmap:这个命令用于将设备文件映射到用户空间的内存中。通过mmap命令,用户空间可以直接访问驱动程序暴露的设备内存。
  21. mprotect:这个命令用于修改内存区域的保护级别。在驱动程序中,可以使用mprotect命令将设备内存区域的保护级别设置为只读或者不可访问。
  22. open:这个命令用于打开设备文件。在驱动程序中,可以使用open命令初始化和配置设备,并返回一个文件描述符给用户空间。
  23. close:这个命令用于关闭设备文件。在驱动程序中,可以使用close命令释放设备资源并关闭文件描述符。

四.文件系统

        文件系统是一种用于组织和管理计算机上存储数据的方法。它提供了一种层次化的结构,使用户能够方便地存储、访问和操作文件和目录。文件系统是操作系统的核心组成部分,它负责管理存储设备上的数据,并提供对文件和目录的抽象接口。文件是存储在存储设备上的数据单元,可以是文本文件、图像文件、音频文件等不同类型的数据。目录是一种特殊的文件,用于组织和管理其他文件和目录。路径是用于定位文件或目录在文件系统中位置的字符串。文件系统提供了一系列操作用于对文件进行读取、写入、复制、移动、删除等操作。

五.Linux网络

        Linux是一种流行的开源操作系统,具有强大的网络功能。Linux网络指的是在Linux系统中进行网络编程和网络管理的一系列工具和技术。这些工具和技术包括网络协议栈、网络接口、路由协议、网络安全工具等。Linux还提供了大量的网络服务,如Web服务器、FTP服务器、SMTP服务器等,这些服务使得Linux成为网络服务器的主要操作系统之一。

六.多线程/多进程

        多线程和多进程是并发编程的两种形式,它们允许计算机同时执行多个任务。多线程是在一个程序中划分出多个线程,每个线程独立运行,共享内存空间和全局变量,适合一些I/O密集型的任务,如文件传输、Web服务器等需要频繁读写数据或者相互协作完成某项任务的业务场景。多进程是在一个程序中同时运行多个程序实例,每个程序实例是一个独立的进程,拥有自己的内存空间和全局变量。多进程适合计算密集型的任务,如图像处理、视频转码等,因为它利用了现代多核CPU的能力来加速计算。多进程还具有稳定性和容错能力高的优点,即使其中一个进程意外崩溃,整个程序也不会停止工作。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我来挖坑啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值