linux内核裁减笔记

来源:互联网 发布:知乎 做一个光头 编辑:程序博客网 时间:2024/04/30 08:53

裁内核并非想象中那么难,但是也不简单。
两件事印象很深:
1、编网卡驱动
  网卡是用的broadcom公司的百兆以太网网卡芯片,用的开源驱动模块编出来以后叫tg3.ko,insmod一下kernel就报错了。开始一两天在网

上找了很多资料,没有结果,后来仔细阅读硬件工程师发过来的硬件设计文档,发现网卡是通过PCI-E BUS接在南桥芯片上的,看看kernel呢,没有编入PCI-E。于是乎加选了PCI-E。当时的选项是这样的:
 [*] PCI support                                                      
         PCI access mode (Any)  --->                                    
         [*]   PCI Express support                                            
         [*]   Message Signaled Interrupts (MSI and MSI-X)
在选了PCI-E以后自动加选了MSI,MSI 是个什么东西我没认真去管,就编了。重新编网卡驱动,insmod。这下倒好,直接kernel crash了。
于是想,也许是这个MSI造成的,选掉以后,
 [*] PCI support                                                      
         PCI access mode (Any)  --->                                    
         [*]   PCI Express support                                            
         [  ]   Message Signaled Interrupts (MSI and MSI-X)
再来一次,编驱动,insmod。奇迹般的,
tg3: eth0: Link is up at 100 Mbps, full duplex.
tg3: eth0: Flow control is on for TX and on for RX.
出现了。
为什么会这样呢?我查了一下MSI的相关信息,明白了这种“信息信号中断”需要CPU有APIC的支持(注意不是ACPI,APCI是Advanced
Configuration and Power Interface,像usb查上去能自动通电就是靠这个东东的作用)APIC叫做Advanced Programmable Interrupt
Controller,高级可编程中断控制器,CPU要用它才能接受MSI。看看用的cpu的datasheet,写着“APIC is not implemented in this chip yet
”ok, 明白了。
 
2、做telnet服务。一直觉得telnet deamon的功能应该实现起来是很简单的,但偶编的系统偏偏就不能用telnet,症状是在通过串口接上去
ps一下可以看到有telnetd在运行,网络也能ping通,但用远程机器(比如windows下的cmd)telnet一下,telnet直接什么信息都没有就跳出
来了。开始这个问题并不重要,后来因为sata接口的原因(这个说来话长,在另一篇blog里面会详细讲)我必须把板子拿到另外一间实验室去
,自己在远端调试它,telnet就非开起来不可了。搞了很久啊,至少也郁闷了我三四个小时都没搞清楚是怎么回事,以前有问题还可以拿
error message去google一下,这个连error message都没有,怎么办呢?基础在做移植工作中的经验来看,有的问题不是这个功能本身的问题
而是其它原因,也许不是telnetd有问题,也许原因在其它方便,我得从源头上去找。试试看源代码吧。busybox的源代码虽是精简版的,但
telnetd还是着实郁闷我一阵子。怎么会比init的源代还复杂?看了十分钟就放弃了。去网上下了一本书叫做《unix 环境高级编程》,讲到
telnetd功能是通过伪终端实现的,内核中一定要有Legacy (BSD) PTY support的支持。不出我所料,果然这一项被我很粗心地裁掉了。补选上这一项,
 -> Device Drivers                                                  
         -> Character devices 
       ->[*]Legacy (BSD) PTY support
重编内核,ok了。
 
到底裁内核需要具备什么样的素质呢?我也说不上来,感觉这东西说简单很简单,不就是make menuconfig,make bzImage, make modules三步嘛,勾勾选选就出来了,但说难又很难,怎么知道哪些项必选,哪些项不需要,就是很高深的东西了。想想前辈cy裁的内核(虽然那个是针对XSCALE裁的,但有很多选项和X86相通,我借鉴了很多),真的精简到找不到哪一个选项可以再被裁掉,我觉得我还是有很大的差距的。

至于要一句话总结内核裁减的决窍,我想说:首先认真阅读硬件文档,其实要什么懂一点点。不是夸张,裁减内核是个包罗万象的很有挑战性的工作。

很有趣味,比打游戏好玩多了 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机提示更新版本怎么办 小米6按键松动怎么办 魅族note6已锁定怎么办 淘宝买东西降价了怎么办 加盟保证金不退怎么办 支付宝两个账号怎么办 微店被投诉售假怎么办 微店屏蔽搜索怎么办 在单位辞职保险怎么办 换奶粉期间拉稀怎么办 小孩换奶粉拉肚子怎么办 换奶粉没有过渡怎么办 婴儿换奶粉腹泻怎么办 胎心率超过160怎么办 孕妇饮奶粉上火怎么办 孕妇奶粉上火的怎么办 喝孕妇奶粉上火怎么办 血糖仪开不了机怎么办 小安素太甜孩子不喜欢喝怎么办 宝宝吃山药过敏怎么办 雅培奶粉上火怎么办 奶粉引起的湿疹怎么办 换奶粉宝宝不吃怎么办 宝宝上吐下泻不吃东西怎么办 hm少衣服了怎么办 手机店生意差怎么办 房子装修不交工怎么办 m651cy手机很卡怎么办 荣耀10掉电严重怎么办 华为手机掉电快怎么办 联想拯救者进水怎么办 手机充电充不满怎么办 一体手机鼓包了怎么办 蔻驰的会员怎么办 淘宝网不退款怎么办 淘宝商家欺诈消费者怎么办 淘宝没货了怎么办 天猫店价格欺骗客户怎么办 天猫欺诈消费者怎么办 空调换热器分流不均怎么办 淘宝买家已拍下卖家缺货怎么办