构建基于Linux的嵌入式应用的一点想法


一. 尽可能少的修改Linux系统的代码。

比较理想的情况是,只修改一行代码。

例如,在 /etc/rc.local脚本的最后,增加一行代码,那就是“/path/to/my_app/start.sh”。通过这一行代码就进入了我们的应用的世界。

这样的修改就很干净,而且这样的修改也很稳定,以后也基本不需要再有什么变化。


二. 不要直接启动我们的应用程序

注意,前一节启动的start.sh还不是我们的应用程序。他相当于用于发射火箭的发射架。start.sh中,可能会做很多准备工作,例如,驱动模块的加载,文件系统的mount,硬件是否就绪的检测,相关文件夹的创建,时间的同步,当前工作目录的设置等等。这些只是在应用启动时执行一次的工作,放在start.sh中做,是比较方便的。如果放在应用程序中做,不仅实现起来麻烦,维护起来也不方便(稍有变动,就得修改编译应用程序的代码)。


三. start.sh的最后一行干什么

start.sh在前面做了各种准备工作。这些都做完了,还要干什么呢?当然是拉起我们的应用程序。但是,如果想让系统的可靠性好一点的话,这里还是不要直接拉起最终的应用程序。而是拉起一个守护程序,例如,Daemon.exe。

Daemon.exe的实现逻辑要超级简单。简单到什么程度呢?简单到几乎不可能有任何bug。只有这样简单的代码,才经得起积年累月的运行而不崩溃。

那么Daemon.exe的任务究竟是什么呢?启动时,从配置文件中读取一个程序列表。将列表中的程序一个个拉起来。然后进入一个循环,监视列表中的程序有没有退出的。一旦遇到退出的程序,就再将他拉起来。


四. 应用程序的实现

上一节中,由Daemon.exe拉起来的程序列表中的程序,才是我们真正的应用程序。他可能由一个或多个可执行程序构成。这些程序的设计要注意什么呢?

1. 尽可能提供一些命令行选项

   例如,-m 5  -d 等。这样,允许我们不用修改代码就能改变系统特性。UNIX中的很多实用程序,基本都支持命令行选项。说到这里,再提一点。如果不是写临时性的非正式程序,最好不要直接使用argv[1]、argv[2]等来获得控制程序的命令行参数。因为这样做,用户就得按照顺序输入各个参数,这就会带来记忆的麻烦。另外,如果程序所需的参数个数发生了变化,可能会造成参数的输入顺序也得跟着变。

2. 通过配置文件提供丰富的特性控制

这样做,主要是提供给用户更大的灵活性。凡是容易有变化的地方,都做成配置项,放到配置文件中。程序根据配置文件的内容,决定应该如何表现。这样能更好的适应用户的需求。

也符合UNIX程序设计的哲学,程序提供的是机制,策略的事交给用户。


3. 核心程序要具有在运行时重新加载配置的能力

程序在启动时,通过配置文件读取了用户的配置,并且跑起来了。如果后面用户改变了配置,怎么办呢?有人可能想,把程序关掉,重新启动一下。对不起,有些高要求的场合是不允许这么搞地。例如,有些核心的程序,通过管道或socket为其他进程提供服务。核心程序挂了,会给使用他的服务的诸多进程造成很大麻烦。所以,核心程序不能挂。当然,使用核心程序的服务的程序可以挂。再例如,有些场合可能需要提供7*24小时不间断的服务。这个不间断,可能是几秒钟都不行哦。因此,核心程序在运行时能够重新加载配置,还是很重要的。

### 嵌入式Linux岗位的要求 #### 技术技能要求 对于嵌入式Linux岗位而言,技术人员应掌握多种编程语言和技术工具。具体来说: - **编程语言**:精通C、C++、Python等编程语言及其相关开发工具和环境[^2]。 - **操作系统理解**:深入理解和熟悉Linux系统的架构与运行机制,这涵盖了文件系统操作、进程管理、内存分配、输入/输出控制等方面的知识。 - **开发工具运用**:熟练使用诸如GCC编译器、GDB调试器、Make构建工具等一系列针对Linux平台的常用开发工具。 - **网络协议栈**:了解TCP/IP模型中的各层功能及其实现方式,在实际项目中可以实现高效的网络通讯方案。 - **实时性能优化**:由于很多应用场景对响应时间有着严格的要求,因此需要掌握如何调整内核参数来满足特定场景下低延迟的需求。 #### 工作经验及相关实践经历 应聘者通常会被期望拥有一定的工作经验或参与过类似的工程项目。这些经验可能涉及但不限于以下几个方面: - 开发和维护基于Linux的操作系统版本,特别是那些用于资源受限设备上的精简版发行包; - 编写驱动程序以支持新硬件组件接入到现有平台上; - 设计并实施自动化测试框架用来验证固件更新过程中的兼容性问题; - 参加开源社区活动贡献代码片段或是文档资料整理工作,展示个人对该领域的持续关注态度。 #### 额外软实力 除了上述硬性的技术和工程背景之外,理想的候选人还应该展现出优秀的团队合作精神和个人学习成长潜力。能够在跨部门之间顺畅交流想法,并且愿意接受挑战不断探索未知领域也是十分重要的特质之一。 ```bash # 示例命令行指令,显示当前使用的shell类型 echo $SHELL ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值