联发科面试总结

昨天刚面试的联发科,今天就来消息了

分享一下自己面试联发科的感受

面试总共三面
第一面是两人一起面,具体问题如下:

  • 我看你做了内核移植,交叉编译链是什么,那个公司的,什么版本?

答:免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora。作为学习,答到以上三个就行。

  • 能说一下具体操作系统移植的过程么?

答:内核启动流程:uboot->kernel->rootfs uboot基本都不会做修改,直接拿来烧在板上即可,uboot主要在调试模式修改一些环境变量,包括tftp的下载地址(serverip、ipaddr),包括bootcmd传给内核的参数,传给根文件系统的参数bootargs,并熟悉相应的命令使用(nand scrub、set pri、boot);内核源码编译,内核参考开发板的参数进行修改(开发板和母版的参数差异),make menuconfig进行模块选择,ulmage的制作;然后内核利用bootargs参数进行根文件系统启动,再就是根文件目录树的创建及其基本文件的创建。
(以上基本就能应付,很少有面试官深入,因为应届毕业生做arm移植的太少了=-=,更深的问题:为什么内核初始化地址是0x30008000,ulmage和zlmage的差别,make menuconfig添加模块的依据,)

  • 移植遇到比较困难的问题

我说我当时移植QT的库时 ,发现版子上分区内存不够,当时也不知道怎么解决 就去学习分区挂载的知识,用df查看分区,发现有分区但是没挂载,导致空间不够,但是又不想在系统启动每次手动去挂载,于是就研究根文件启动init的过程,在配置文件inittab添加挂载命令,系统就会自启动并挂载分区了。

  • 接着问,如果开发板上只有十兆空间,但是你的移植的QT库有二十兆,你会怎么做?

我说的扩容,他说除了扩容呢,我接着说移植的文件中有一个stripped属性,用strip命令去除库文件中的符号表,会小很多,他说QT编译一般会做这个工作,还有别的方法么…我就答不上来了。查了一下看了别人的方法https://blog.csdn.net/yming0221/article/details/6548349

  • 会shell脚本么

我不会…慢慢补一下,但是这个很加分,即使他不问你,你自己说出来也很加分,做嵌入式真的要shell脚本,提高办事效率用的。

  • 字符设备的编写流程

主要答probe函数的实现,platform总线的思想
设备号分配------->cdev结构体的初始化(绑定fops)------->cdev结构体的注册

  • linux调度算法有哪些

SCHED_OTHER 分时调度策略,
SCHED_FIFO实时调度策略,先到先服务
SCHED_RR实时调度策略,时间片轮转

  • 多线程为什么要设置属性,为什么要设置栈大小

我答的不够用所以要分配更多的空间…后来百度了一下,linux线程默认分配8M的调用栈,那么太多的线程会导致栈溢出的问题,所以可以调用pthread_attr_setstack自动分配合理的大小防止栈溢出。当然线程还有其他的一些属性。

  • 进程通信有哪些,如果我需要传输大量数据使用那种方式效率最高。

管道,命名管道,消息队列,共享内存,信号量,socket unix域,数据很大的时候,用共享内存是最好的,不用从用户态到内核态的频繁切换和拷贝数据,直接从内存中读取就可以,速度最快,但是共享内存开辟空间就必须要使用同步机制,这是他的缺点。

  • 为什么选择sqlite

轻量级、跨平台。

  • (我说了使用信号signal)信号的使用方法

signal函数和signalcation函数还有常用的信号。


后面就是我自己阐述了自己另一个串口编程的项目,尽可能的展现自己的东西,表达自己的思想,很加分的。

二三面就闲聊…基本就这样

你可能感兴趣的:(笔试面试)