作者descent (「雄辩是银,沉默是金」)
看板Soft_Job
标题Re: [请益] 非本科韧体技能树该怎麽点
时间Sun Feb 12 16:13:45 2023
不知道你说的韧体是指什麽? 嵌入系有很多种:
* embedded linux
* 使用 rtos, 例如: freertos/vxworks
* bare metal 程式
* 手机
* 其他:
每种都有自己需要修练的功课, 但大概都脱离不了 c 语言,
除了 bare metal 都需要一些 os 相关知识,
也不是 bare metal 不需要 os 相关知识,
而是在 bare metal 要打造 os 机制蛮难的,
选一个 os 来用会比较容易。
虽然 OS 观念大同小异, 但大同之中的小异就足够让人伤透脑筋。
细节很多, 提一些大方向。
embedded linux:
device driver
porting 到新 chip
user mode 应用程式
这 3 个各有其功课要修练, porting 到新 chip 大概是最难的,
一般人也比较没有机会练习到, 大概连第0手资料也没有。
device driver 由於和硬体有关, 会和硬体打交道, 需要使用
一些硬体相关工具, 示波器之类的。也要熟悉 linux device driver
架构。这个要练习比较麻烦, 书籍大概都过时, 需要自己看第0手资料,
也就是自己要看 device driver souce code, 然後想办法把
自己要 porting 的硬体写出来。
user mode 应用程式有很多书籍可以学习, 要看懂他们并不容易,
需要花费不少时间。
尤其是 signal/fork/thread 议题都很难搞懂,
但这只是其中一部分而已。
https://descent-incoming.blogspot.com/2020/03/linuxunix-signal.html
signal 议题可以看看这篇, 知道 signal 有哪些复杂的议题。
rtos 则是看使用那一套, 就需要去学习其中的用法,
使用起来应该会和 linux 有点差异。
有 ice 会比较容易 debug, 一般大概也会需要用 ice。
bare metal 程式也是很难, 需要从开机程式开始撰写,
如果 chip 厂商有给范例或是相关函式库, 也许会简单一些。
但如果 c 基础不够, 可能有 bug 时, 不太容易找到问题。
会需要使用 ice 的经验。
至於课本的演算法, 资料结构, 不能说不重要,
但可以从基本先熟悉, 不用着急学比较难的,
例如 queue, linked list, 基本 tree,
avl tree, rbtree 可以先缓点。
另外大概都会需要一些反组译的能力,
所以还需要略懂该 cpu 的组合语言。
在没有 ice 下或是没有开发版, 可以使用 qemu 来练习开发,
例如可以使用 qemu 模拟 raspberry pi 2/3,
因为通常没有 ice 来连接 raspberry pi 2/3,
这样就可以得到 ice 等级的 debugger,
使用 qemu + gdb 来除错, 一开始应该会觉得很痛苦,
但取得这个能力是很重要的。
我甚至用 qemu + gdb 来 debug uefi 程式,
因为都是使用 gdb, 所以只要痛苦过一次,
很多平台都可以用。
※ 引述《ming0071 (ming)》之铭言:
: 背景:北科非电资大四,毕业後也是在北科读硕非电资(不打算再重考),硕班未来是跟自
: 走车相关的,目标大概是远离机构设备做韧体/嵌入式系统(不太确定这两个的详细差别
: ),也不太清楚这个校名科系有没有办法
: 目前有修过资工系的资料结构了,不过是用python,现在在考量是该怎麽选择
: 1. 接着继续修演算法的课为主,硕班的课有余力再修
: 2. 修硕班的课为主,把学分拿到,有余力再修演算法
: 3. 买一块板子来把C再好好的练熟,也用C练着写基础的资料结构,再多了解一些硬体的
: 知识
: 爬了文後目前的理解是 硬体的知识>C、C++ >资结、演算法、OS,但是演算法、OS也是蛮
: 重要的,不知道该先着重去了解哪一块好?
: 也想请教修演算法的课是必要的吗?或者是修作业系统会比演算法来的有效益呢?因为爬文
: 後发现提到作业系统的次数其实还比演算法多一些,但又怕直接读作业系统会看不太懂。
: 如果要挑选一个先了解的话要选哪个好呢? 又或者其实都一起了解才最优?
: 最後想问是该多练C还是C++好,发现有的人说C,有的人说C++,似乎都各有各的说法
--
纸上得来终觉浅,绝知此事要躬行。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.200.83.215 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1676189634.A.BA2.html
1F:→ withoutshine: Design house 的 firmware engineer 还要看懂奇怪 02/12 16:40
2F:→ withoutshine: 的 register 跟帮忙做各种 workaround 02/12 16:40
3F:推 nicetw20xx: 谢谢大大分享 02/12 17:26
※ 编辑: descent (1.200.83.215 台湾), 02/12/2023 21:20:23
4F:推 ming0071: 谢谢分享! 02/12 21:58
5F:推 alex70266: 推一下,编制中型以下的公司是差不多很可能前三个都要 02/12 22:26
6F:→ alex70266: 碰一点。如果你还遇到有些产品即时性需求高会用自己os 02/12 22:26
7F:→ alex70266: 的公司,那porting还有os概念都是逃不掉的 02/12 22:26
8F:→ alex70266: 但实际上如果是在公司里面实战,很少让新人自干,也不 02/12 22:30
9F:→ alex70266: 太可能希望一个新人这些都会XD 02/12 22:30
10F:→ alex70266: Linux userspace progrmming的话圣经就是TLPI 02/12 23:48
11F:推 viper9709: 推分享 02/12 23:54
12F:推 MoonCode: 02/13 01:29
13F:推 v86861062: 推推 02/13 08:58
14F:推 e12518166339: 推推 02/13 09:49
15F:推 DrTech: 清楚明了,连我这外行都看得懂,而且很有系统化的介绍 02/13 12:27
16F:推 timofEE: 推推 02/15 22:56
17F:推 knme: 推推 02/17 11:40