当前位置: 首页 > news >正文

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十八章 Linux编写第一个自己的命令

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、

【公众号】迅为电子

【粉丝群】258811263(加群获取驱动文档+例程)


第十八章 Linux编写第一个自己的命令

本章内容对应视频讲解链接(在线观看):

Linux编写第一个自己的命令  https://www.bilibili.com/video/BV1M7411m7wT?p=18

18.1 命令的概念

命令就是可执行程序。

比如说我们输入 ls -al ,ls 就是可执行程序的名字。-al 就是要传递进去的参数。

ps 命令:

功能:显示进程的动态。

输入 “ps” 命令

当shell接收到我们的命令以后,会根据我们输入的字符到环境变量和默认路径中去找,环境变量上一章提过,可以通过打印查看都有哪些环境变量,然后它会去寻找有没有名字和我们输入命令一样的程序。

18.2 定义一个自己的命令

进入/home/topeet/test目录,把原来的都删掉,作者这里先创建一个 .c 文件,使用“touch commond.c ”命令,使用命令“vi commond.c ”打开文件,然后输入以下内容:

#include <stdio.h>

int main(void)

{

      printf(“This is my commod!\n”);

return 0;

}

接着使用命令“gcc commond.c -o commond ”,编译 commond.c文件,然后运行一下,使用“./commond ”命令,虽然我们现在可以执行这个可执行文件,但是我们现在的这个可执行程序只能在 /home/topeet/test 这个路径下输入,而且还要加上当前目录,如果我切换到上一级目录,就不能用“ ./commond ”来运行 commond ,因为当前目录下没有commond这个文件,我们直接输入命令“commond ”也不行,会提示错误。

我们上一章学了环境变量,环境变量里边 PATH 变量决定了我们的程序或者是命令都要去哪些路径下找,那我们可以把存放可执行程序的路径加到环境变量里面,那么在任意路径下输入 commond 这个命令,它就会自动找到 commond 这个可执行文件来帮助我们执行。

我们前面学到的根目录下的 bin 文件是专门存放可执行文件的,我们直接把生成的这个 commond 可执行性文件拷贝到根目录下 bin文件夹也是可以的。即用 cp 命令拷贝到 bin文件夹,作者输入 “cp commond /bin/ ”,提示没有权限,加上sudo ,然后直接输入“commond ”,可以看到打印 This is my commond! ,然后再返回上一级,这个路径下是没有commond这个程序的,我再输入“ commond ”,也是可以执行成功的,所以用这个方法是可以的。

我们不使用这个方法,我们把存放 commond 这个可执行文件的路径加到PATH这个变量里面去,先把刚才我们拷贝到 bin文件夹下的可执行文件把它删掉。

我们直接使用命令来添加,“export PATH=/home/topeet/test/:$PATH ”,添加环境变量的办法上一章已经讲到了,使用命令“echo $PATH ”来检查是否添加成功,现在就已经成功添加进去了,如下图所示。我们输入“ commond ”这个命令来测试,也能执行成功,然后我在换另一个目录,作者把它切换到 Videos 这个文件夹里面去,输入“ cd Videos”,然后在输入 commond ,同样也能执行成功,同时也验证了之前的说法,命令就是可执行文件

本章是把我们之前学到的进行一个串通。比如说环境变量的修改, gcc 的编译。同时我们也知道了平常使用的命令就是一个可执行程序,而且在键盘上输入了我们的命令之后,这个命令发给了 shell 。也就是如下图的这个 bash,是发送给它的,然后它会根据我们输入的这个字符串去环境变量里面去找,去看看有没有和我们的名字一样的程序。

相关文章:

  • PageDTO<T>,PageQuery,BeanUtils,CollUtils的封装
  • openfoam生成的非均匀固体Solid数据分析、VTK数据格式分析、以及paraview官方用户指导文档和使用方法
  • 昇思15天
  • sdwan是硬件还是网络协议?
  • html+css+js仿黑客帝国代码雨
  • 应对高并发请求:服务器性能压力的解决方案
  • TLS与SSL的区别
  • 手机下载APP (uniapp/vue)
  • 矩阵分解及其在机器学习中的应用
  • 基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)
  • Pinia
  • jdk中自带的并发类
  • Bash ——shell
  • 从零开始实现大语言模型(三):Token Embedding与位置编码
  • 香蕉派BPI-Wifi6迷你路由器公开发售
  • 分享一款快速APP功能测试工具
  • [LeetCode] Wiggle Sort
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • CAP 一致性协议及应用解析
  • css选择器
  • es6(二):字符串的扩展
  • JAVA并发编程--1.基础概念
  • JS实现简单的MVC模式开发小游戏
  • PAT A1120
  • quasar-framework cnodejs社区
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • vue自定义指令实现v-tap插件
  • 简单数学运算程序(不定期更新)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端面试题总结
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 微信小程序:实现悬浮返回和分享按钮
  • mysql面试题分组并合并列
  • UI设计初学者应该如何入门?
  • !!Dom4j 学习笔记
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $().each和$.each的区别
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)VirtualBox安装增强功能
  • (转)为C# Windows服务添加安装程序
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ***测试-HTTP方法
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET delegate 委托 、 Event 事件
  • .net6Api后台+uniapp导出Excel
  • .Net7 环境安装配置
  • .NET学习教程二——.net基础定义+VS常用设置
  • //解决validator验证插件多个name相同只验证第一的问题
  • @RequestBody与@ModelAttribute
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [acm算法学习] 后缀数组SA