本人此刻还不是什么驱动工程师,连入门都谈不上,但我坚信在未来的3-5年我肯定能成为我想像中的人,因为我马上就要进入这一行工作了。写下这个日志来记录我是怎么最后成为我想像中的人才的,呵呵。
《Linux驱动工程师》这个东西是我在大二的时候看到有一篇讲如何学习嵌入式的,点击这里下载PDF,里面讲到嵌入式分为四层:硬件,驱动,系统,应用程序;还说linux驱动最难然后工资也最高就冲着他这句话我就决定我大学毕业的时候要去做这个linux驱动工程师,随后我就先后买了51单片机,ARM7,ARM9还有一大堆的视频教程准备来进行学习。我还跟我旁边那个哈工大哥们说:“我们学校像我这样的人很少,你们学校呢?”他说:“太少了,不过我们学校都是做这种板子卖的人比较多!”。行,你们牛!即使是买了这些东西,从大二到现在都快毕业了但感觉还是没有入门。回想一下我都学过什么啊:1:自己在ARM9上写bootloader(主要锻炼了三方面的知识:C语言应该写了有近万行的代码,ARM9的外设的基本操作方法如UART,LCD,TOUCH,SD,USB,ETHERNET...,makefile);2:移植和学习linux驱动。下面我说一下我学习Linux驱动的一个思路这也是我在面试的时候自我介绍中最重要的部分;1:硬件知识 学习Linux驱动首先得了解这个驱动对应的硬件的一些基本原理和操作方法比如LCD你得了解它的场同步,行同步,像素时钟,一个像素的表示模式,还有就是这个LCD是怎么把图像显示在屏幕上的。如果是USB,SD卡就得了解相关协议。可以通过spec(协议)、datasheet来了解,这就是传说中的Linux驱动开发三件宝之二,还有一个就是linux相关源码。2:了解linux驱动框架 linux下的每一类驱动差不多都是一个比较完善的子系统,比如FLASH的驱动它就属于MTD子系统从上到下分为四层:设备节点层,设备层,原始设备层,最下面的与具体硬件相关的硬件驱动层,通常要我们自己来实现就是最下面这个与具体硬件相关那部分代码。3:了解这个驱动的数据流。这个过程与第二个过程紧密相关,如果了解了驱动的框架差不多这个过程也算了解了。比如flash.在/dev/目录下有对应flash的字符设备文件和块设备文件,用户对这些文件进行读、写、ioctl操作,其间通过层层的函数调用最终将调用到最下面的硬件驱动层对硬件进行操作。了解这个过程我相信在调试驱动的时候是很有帮助。3:分析与硬件相关通常需要我们实现的那部分源代码。4:三板子上将驱动调试出来。每次调试都会出问题,但我买的板子提供的资料比较全调试过程中遇到的问题都比较浅显,即使是浅显的问题也要把它记录下来。(这个是我上次在华为面试的时候,那个人问我你调试驱动遇到过什么问题吗?你是如何解决的。当时我学习还没有到调试驱动这一步,所以那次面试也惨败收场)。
好像说了这么多,还没有进入正题《工作的选择》。在年前去了龙芯,实习2.8K,转正3.5k,环境还是不错,经理很好,头儿也很帅都是中科院的硕士。不过去了两周我就没去了身边的人都不太理解,我也一度有过后悔的时候,从龙芯出来应该是1月6号,也就是从那个时候开始我就没有再找工作,转而学习linux驱动。一直到上周日。上周日的晚上我就开始投简历一开始要找linux驱动,在智联里面输入linux 驱动出来500来个职位,点开一看没有一个自己符合要求的,差不多都要3-5年经验本科,有时候好不容易 有个实习的关键字在里面,一看要求硕士,严重打击了我的信心,哎不管了随便投,最后又投了一下嵌入式关键字的职位。最后就瞎申请,看看职位要求差不多就申请。周一来了,这周一共来了6个面试,创下了我求职以来的历史新高。周一下午面了一家感觉还不错不过到现在也没有给我一个通知,估计当时我要了4500把他给要跑了,这家是做测量的不是Linux驱动,差不多是把ARM当单片机用。周二上午一家也是要招linux驱动面了估计不到二分钟,他们就要招有几年工作经验马上能干活的人,不过唯一让我欣慰的是那个前台真TDM漂亮。周二下午有一家直接没去。周三有两家,上午是做专业计算机的,下午是百纳威尔(天语)linux中级驱动工程师,天语是我重点对待的对象。两家都很远去第一家要近2个小时,第二家要超过2个小时,从第一家到第二家要2个小时。本来打算不去第一家,直接去天语。但想了一下去吧长一下见识也行。直接面试没有笔试问了一些大概情况,没有问太细的技术问题感觉还不错。10点到的那儿,出来才10点25,直接坐车到天语,一下车就看到两个大字“天语”,真是大,里面还有篮球场,网球场,估计有我们学校这么大,李宁 也在旁边,这个时候才12点,本来约的是下午三点前,去那边吃了个饭,又围着天语的大门转了几圈,这个时候上午那家来电话了让我下周一上班,说第一个月给我3.5k,第二个月给4k,我当时一听这么高,直接就答应了,还准备打道回府不去天语了,反正来就来了就去试一下,我从13:20进去到16:20才出来,一进那个6楼我就被震到了给我一个感觉-大公司,这一层就像一个大会场一样一眼望去一片隔断式的办公桌和以前在电视里面看的很像。先让做一套题做了一个小时,都是操作系统,C语言,ARM,还有LINUX驱动方面的。完了来了一个人,拿着我做的题一道一道的看,我错的了,不会的还给我讲。到目前为止也面了十几家了也做了不少题像他这样的我还是第一次碰到,他总体觉得我还做得不错,然后就问我问题:问我做过什么项目吗?我说没有(单片机的都不好意思说了)。问我IIC,UART,LCD,SD,USB,FLASH,每个我都能答上来一些我确实也都学过,但稍微一深入点问我就不行,比如问:
uboot启动时候对nandflash做哪些初始化?设置频率(瞎说的)
linux启动过程?不知道(曾经准备研究)
IIC有几根线?我说这个简单两根(sclk,data)。
UART的速度有哪些?115200,9600.UART的流控制熟悉吗?不知道。
IIC和UART有什么区别?不清楚(他说一个是同步一个是异步)。
SD卡有几根线,有哪些线?9根,4根数据线,cmd线,clk线等等
USB都有哪些过程?枚举,枚举就是要获取设备的信息。。。。(这个我答得还行)
愿意加班吗?不加班都不习惯。
我一看这情况好像没戏,虽然东西是了解一些但是没有做过什么东西。当时我觉得已经无所谓了,反正有上午那家保底。
最后他给我的评价是:没做过项目都了解这么多,已经不错了,但是如果要上项目的话会比较吃力。然后他说让我等会儿,他去找他们经理再来和我谈一下。5分钟后他带来一个人说是他们驱动经理,驱动经理来了就和我聊家常,废话了半天,我只记得他说linux驱动我们很少招本科生一般都是招硕士生,即使是本科生也是工作了好几年的。这话听我感觉很爽。出去了说让我再等等,5分钟后驱动经理又带来一个人说是他们总监,总监也不问技术问题就说你的这种情况可以先来我们公司实习到你毕业的时候就转正,实习工资2k。我问他能不能提供住宿,他说实习期间可以提供住宿,我们也有班车,绕着3,4,5环转。让我呢回去考虑一下如果可以就去实习。
回来之后,我当时决定就去上午那家,把最优路线都查好了。晚上把这个我今天面试的情况和老孙汇报了一下,又共同探讨了一下:他说去天语,大公司,又是你梦寐以求的linux驱动,去那儿干上2-3年你不就成了高级linux驱动工程师了吗?又问了两个人都说让我去天语。最后我也决定去天语。今天上午我给那个驱动经理打电话,我再问了一下我过来是做linux驱动吗,他说是的就在我的部门,我是驱动经理。我说的决定来实习。他说那我通知人事部,人事部会再通知你。