学嵌入式Linux软件开发需要的知识

简介:

        首先,我得声明嵌入式Linux的内核很重要,非常非常重要!但是这个东西如果你没有一定的基础,还是暂时不碰为好。因为想知道它的工作机理,你必须具备N多知识才可以的。弄明白内核(包括驱动和协议栈,以及内核工作机制)你至少需要操作系统原理、体系结构、微机原理、ARM体系结构、网络原理、数据结构、C语言、数字电路技术方面的知识;当然这些还远远不够,你还需要了解很多细微之处;这里就不打算多举例了,在这方面有兴趣的同学在学校开设课程不完备的条件下你很容易走上一条死路,一定要慎重!
 
  其次,我不建议新手以一个万能的超人方式来学习嵌入式(有人说嵌入式是程序界的特种兵,啥啥都会,上述观点我只是部分赞同),嵌入式不是计算机专业的专利,在很多年前,嵌入式根本就不是计算机专业的人能玩的;因为它是一门跨专业学科的行业,以前一直电子和通信两家独有。随着硬件技术越来越成熟,慢慢地才把嵌入式开发的精力从硬件中解放出来,逐步转移至软件开发方面,尤其在智能系统的使用上,软件开发层面的任务也越来越多,逐渐向大规模软件方向发展。所以,软硬方向二者选一是非常合理的!
 
  再次,一旦你确立了软件开发作为自己的发展方向,那么你选择一个嵌入式系统就是当务之急的问题了,我建议你选择Linux,因为它是完全开源的,很多东西错了你就能直接查找到原因,不依赖他人而直接解决;否则只能向厂家报告BUG了。这个Linux还有一个非常明显的好处,就是你一旦达到了某种高度,你在看其它系统如WINCE、Symbian等,你也不会对它感冒的,因为你已经知道他们的GUI等关键技术的大体原理了。
 
  最后,选择了Linux之后,你就必须熟练地使用C语言,熟悉你使用的Linux系统;切记开始从浅滩入水才能到深海的道理,否则直接入深海你必然会被淹死的。“先会用,后会做,最后会创造”,这个过程一定要好好把握,切勿超之过急!
 
    学习嵌入式Linux设计需要的细节很多,不过这都不是问题,关键在于你的心态!那么我常说的,如果你能自己写个GUI系统的话,那你将会很通透的理解嵌入式Linux的构架,也会很深刻的明白嵌入式Linux软件开发的精髓。
 
 
DIY的GUI系统需要的知识:
 
1、系统提供写屏幕的/dev下的文件名是哪个?文件操作如何和类似二维数组的LCD一一对应?
2、一个图形界面需要的是格式问题(8位、16位、24位、32位),这些格式如何写入数据?
3、如何在LCD上画一个点,并且能很好的兼容各种格式?
4、当有多个进程或线程向LCD写入信息时,如何避免写入冲突?
5、触摸屏和鼠标操作相似吗?如何编写类似鼠标的操作呢?
6、解决了画点的问题,那你能根据画点的方法,写出画线、画框、画圆和其他形状的方法吗?
7、能根据你解决的触摸屏问题和画点、线、面等方法绘制一个类似Windows界面的GUI吗?
8、多个GUI界面直接叠加如何解决?那事件响应呢?
9、特殊GUI组件你怎么设计,如对话框、按钮、文本框。。。。。。他们表现方式可不一样啊
10、当组件在某个顶级窗口上出现时,一但被其他组件覆盖,你如何进行裁剪?
11、你如何编写组件被触发时所需要执行的事件机制?
12.、组件之间的消息机制是如何传递的,你是如何处理的?
13、文字显示你怎么办?很多组件需要文字标签,你是怎么解决的?
14、若一个项目需要多个程序分别运行才能完成,那么这两个程序一旦都是GUI的,他们之间的显示还能层叠和有效防止这两个程序写入LCD时不发生冲突吗?你设计之初的构架合理吗?
 
  当你把DIY的GUI系统做完,你突然发现原来原来原来一切一切一切是这样的道理啊,这时候再看WINDOWS你突然发现,你能解释以前你无法明白的现象了!这个时候,你已经得小道而成小仙啦!
 
  接着你可以尝试狂暴而有趣的移植技术,把你看到的,分析后能够移植的东东都移植过去,权当练习!此时你已经默默地把网络(Socket)、数据库(SQLIT3)、多媒体(....)都玩了一遍,可以了!可以考虑做像样的项目或去搞内核研究了。其他的系统,我估计你只需要最多2个月,你就知道如何使用和开发了。一切将变得VERY EASY!
 
大道至简,小而蕴真!
 
 
     本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/949597,如需转载请自行联系原作者

相关文章
|
8天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
59 13
|
6月前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
199 1
|
4月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
150 3
|
4月前
|
传感器 人工智能 网络协议
:嵌入式 Linux 及其用途
【8月更文挑战第24天】
219 0
|
5月前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
**嵌入式Linux学习误区摘要** 1. **过度聚焦桌面Linux** - 许多学习者误将大量时间用于精通桌面Linux系统(如RedHat、Fedora、Ubuntu),认为这是嵌入式Linux开发的基石。 - 实际上,桌面Linux仅作为开发工具和环境,目标不应是成为Linux服务器专家,而应专注于嵌入式开发工具和流程。 2. **盲目阅读Linux内核源码** - 初学者在不了解Linux基本知识时试图直接研读内核源码,这往往导致困惑和挫败感。 - 在具备一定嵌入式Linux开发经验后再有针对性地阅读源码,才能有效提升技能。
|
6月前
|
消息中间件 安全 Java
【嵌入式软件工程师面经】Linux多进程与多线程
【嵌入式软件工程师面经】Linux多进程与多线程
82 1
|
6月前
|
存储 缓存 Unix
【嵌入式软件工程师面经】Linux文件IO
【嵌入式软件工程师面经】Linux文件IO
54 1
|
5月前
|
大数据 Linux 程序员
软件开发常见流程之服务器+Linux部署项目,会用服务器+Linux部署项目资料
软件开发常见流程之服务器+Linux部署项目,会用服务器+Linux部署项目资料
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
106 8