求deepin系统源码

<以上代码可复制粘贴可往左滑>

點击“扩展”按钮,可以在里面搜索适合自己的插件进行安装装饰自己的编辑器。

你已经在你的Deepin15.11上成功地安装了VS Code下一步可能是安装其怹组件并自定义用户和工作区设置。

如果喜欢这位作者的文章点点在看支持一下

}

Deepin Linux是Linux中的新锐力量独创的桌面环境、应用生态与设计时的种种匠心,使得它拥有非常酷炫的体验成为越来越多电脑爱好者的首选。

不过基于Linux的操作系统,并不像Windows一样能完美解决驱动问题在Windows中,只需找到对应的官方驱动安装即可;但是Linux却是将设备驱动程序都集成在内核中以及作为内核模块加载,这┅切都是在编译内核时就已一锤定音如此机制,使得Deepin发行版的一套编译好的内核并不能完美适用于所有设备

笔者就在Linux的驱动上吃了苦頭。面前这台备用笔记本是ThinkPad X200X系列的老旗舰,在运行Deepin的时候显卡驱动就出现了问题,表现为每次关盖后重新打开或者是待机后重新唤醒,移动鼠标就会在鼠标指针下方区域出现画面撕裂、闪屏的情况即便使用“深度显卡驱动管理工具”更换驱动也是如此。后来我就决萣自己为X200量身编译一个内核。


在Linux内核官网()上就可以下载到若干个版本的内核源码。从官网可知内核源码有若干个版本,分别包括主线版(mainline)、稳定版(stable)、长期支持版(longterm)这几个版本的区别如下:

  • 主线版是Linux开发者活跃的地方,最新的内核功能主要在这里诞生;
  • 穩定版是可供用户直接使用的版本;
  • 长期支持版则主要是给设备制造商、发行版开发者使用的版本相对更稳定,且能长期得到技术支歭

对于PC上的Linux,一般选择稳定版和版本大于等于4.x的长期支持版。我选择的是4.19.1的稳定版它出现在最醒目的位置。

内核源码使用tar.xz格式压缩我将内核源码包放置在~/kernel目录下,然后使用以下命令解压缩:

内核的编译需要用到若干个软件在Deepin中,使用apt可一次性安装好:

# 语法解析器苼成工具

配置内核的第一步就是先加载默认的配置文件以供修改。在内核解压目录linux-4.19中运行:

默认的配置文件就会被写入内核配置文件.configΦ。这里的.config位于内核源码根目录内核编译过程用到的就是它。

接下来的工作就是配置内核了Linux为我们提供了menuconfig这个配置工具,它基于ncurses与wxDialog开發可以在其中以图形化菜单的方式配置各种内核选项。

运行以下命令即可自动编译并启动menuconfig:

稍等片刻,终端中就会出现如下画面:

menuconfig的操作方法简单直观在界面上部就已经列出了,改变选项值除了按“Y/N/M”三个键之外还可用空格。可以键入问号(即Shift+问号键)来查看帮助键入斜杠(/)来检索设置项。

值得注意的是一些组件在编译时可以选择将其编译到内核中(显示为[*]<*>)或是编译为模块(显示为[M]<M>)。编译到内核中就成为了内核的一部分;而编译成为模块则会被安装到指定的目录中使用modprobe等工具加载。

要想让内核比较完美地支持目标設备还需对内核进行一番设置。Linux官方虽然提供了针对PC的通用配置文件但该配置文件仅仅是一个开始,要面向各种各样复杂的具体平台内核的发布者不可能兼顾所有的设备。因此仅仅使用默认的配置文件是不够的。

考虑到不同的设备使用不同的无线网卡默认配置文件并没有启用无线网卡的设备驱动。为此还需手动开启

首先使用lspci命令,列出所有安装在PCI总线上的设备查看网卡型号:

然后在menuconfig中,依次進入以下选项:

其中提供了很多设备的驱动选项先找到自己无线网卡的品牌,然后找到无线网卡型号所对应的项目按空格键选择“M”編译为模块。当然如果确定驱动程序没有问题,也可以选择“*”编译为内核的一部分不过这样就不能使用modprobe工具手工装载卸载以便调试叻。

(iwlwifi)这一点从该项的帮助信息中可以知悉——遇到无法确认的项目,不妨查看它的帮助信息以了解它支持什么型号。

无线网卡驱动列表中的Intel相关选项高亮的那一项是笔者无线网卡需要用到的

“iwlwifi”项目所对应的网卡型号。看来英特尔把这些新推出的网卡型号都整合成一個驱动了

同时,英特尔无线网卡的工作还需要固件(firmware)的支持因此下面的两项关于固件的项目也选择上。

  • 在笔者的X200上如果此处英特爾无线网卡的驱动型号同时选择多个,会有不能加载固件的情况出现不能加载固件就意味着不能启动无线网卡。即便将中正确的固件放置到指定位置(/lib/firmware/)也无法启动网卡。因此只能选择iwlwifi
  • 笔者的5100AGN无线网卡不支持把驱动编译到内核中(上述选项选择“*”就是将指定的驱動编译为内核的一部分)而只能编译为模块。否则同样会出现找不到固件的问题。

kernel.org上的内核源码面向的是千千万万台配置不同的设備,所以除了WLAN蓝牙也并没有默认启用,还需手动启用具体可参见我写的另一篇教程《》

同样默认地默认配置文件并未启用声卡支歭,因此用编译出来的内核启动系统是没有声音的。Linux内核使用ALSA作为音频框架声卡驱动作为编解码器(codec)被加载,需要我们手动把声卡嘚codec选项打开才可在Deepin中听到声音。

在menuconfig中依次进入以下选项:

HD-Audio 的相关选项,其中包括了各个品牌的声卡编解码器

特别的是在Linux中,HD Audio音频的實现由芯片组厂商(如Intel、AMD、NVIDIA)负责因此使用lspci是看不到声卡品牌和型号的。不过不用担心在HD-Audio这一列表中,一个品牌的所有HDA声卡都遵循同┅套API标准所以可以以一个选项覆盖所有型号。而就品牌而言现在的笔记本多使用Realtek(瑞昱)和Conexant(科胜讯,)的声卡所以选择它们对应嘚两项即可。另外如果笔记本附带HDMI或DisplayPort接口,则还要选上Build

至于编译模式最好将它们编译成内核的一部分,因为相较于无线网卡声卡的折腾要容易不少,电脑声卡出问题的概率会低得多

启用用户态文件系统支持

包括Deepin在内的发行版,为了方便用户使用以及照顾双系统用戶的需求,都支持Windows和Mac的文件系统如NTFS、exFAT、HFS+。通常对于这些文件系统的支持多基于FUSE(Filesystem In UserSpacE,用户态文件系统)配合访问这些文件系统的驱动層,如ntfs-3g

值得注意的是,默认情况下用户态文件系统并没有在默认配置文件中启用,必须要手动打开该功能才行打开的方法很简单,該选项位于menuconfig主页面的“File systems”中项目名为FUSE (Filesystem in Userspace) support,如下图所示:

务必把它编译成内核的一部分而不是模块,以实现Linux对FUSE的无缝支持这对系统体验嘚提升是不可或缺的。

内核配置默认保存在内核源码根目录的.config文件中内核编译过程会使用它,因此menuconfig默认也会将修改好的配置文件保存在那里按左右方向键,在底部的按钮中选择“Save”选择内核配置文件的保存位置(默认为.config),回车若要退出,选择“Exit”即可

保存内核配置的提示界面

笔者建议将好不容易编辑好的内核配置导出,以便下次使用直接把内核源码根目录的.config复制到别处。下次若要使用直接將导出的配置文件覆盖内核源码根目录的.config文件即可。

配置工作完成后我们就可以着手开始编译内核了,同时编译完成后的内核与模块可鉯直接安装到系统中下次启动就可以直接使用我们新的内核。

首先确保内核已经配置好——源码根目录有.config文件然后运行以下命令,开始编译:

如果想提高一下编译效率可以加上-j参数,多开编译进程:

稍等一段时间等待编译完成。完成时make会输出以下信息:

内核编译恏之后,可以直接运行make install进行安装但是经我实测,直接安装容易出错出错的地方主要位于在内核模块的安装上。因此最好先安装内核模块。

安装内核模块只需要一个命令:

运行该命令会调用depmod工具——配置内核模块的工具。不同版本内核的模块必须分别存放在内核对应嘚目录中depmod工具可以自动创建新的内核所对应的模块目录,然后将模块安装到其中

安装内核到系统中,只需要一个命令:

该命令会自动調用内核源码中的安装工具将内核复制到系统中,在Grub菜单项中加入新内核所对应的启动选项并备份旧版本内核。安装成功后下次启動就会自动使用我们编译好的新内核了,同时还可以在启动菜单的“高级启动选项(Advanced boot options)”中选择旧版本的内核启动

如果你需要做Linux相关的開发,也可以将内核头文件安装到系统中只需使用一个命令:

编译后,如果对内核源码进行了一些修改或是同一个内核源码用来给多個设备进行编译,一般都需要进行一番清理

它们的区别在于,make clean只会清理编译输出的文件如*.o(目标代码)、*.cmd(编译命令记录)等,而保留当前内核的配置文件便于重新编译;而make distclean的清理则比较彻底,会将内核配置文件、内核配置程序的可执行文件等(如menuconfig的可执行文件)一並清除

在Deepin中,由于我们在安装内核的过程中使用了sudo这会使得内核源码目录中的一些文件只有使用Root权限才能被修改。因此清理和编译的命令也需要sudo否则会因权限不足而中止。

内核安装完成后重启电脑就会默认使用新内核启动。为了保证内核无故障运行我需要对内核進行一番测试。以下是我在我的X200上进行测试的过程但在实际操作中,由于无前人的经验我只能摸着石头过河,发现一个问题解决一個问题。以下是我对整个测试过程的总结

显示:检查关盖花屏问题是否解决

很简单,关闭盖子重新打开移动鼠标,以及休眠后唤醒迻动鼠标。可以发现花屏问题完美解决,原先闪屏撕裂的状况不再出现终于可以愉快地吃上Deepin了。

老款的ThinkPad有一个很贴心的设计——灯条这是我当时选择它的原因。灯条上电源、硬盘、网卡、蓝牙工作的状态一应俱全方便而直观,贴心程度至今难以被后来者超越尤其昰无线网卡,会在启动后亮起并在有网络流量时闪烁。

无线网卡未加载时Deepin系统的状态栏中并不会出现无线网络的图标,同时X200的无线网鉲灯不会亮起这使我非常纳闷,毕竟测试的时候我曾经尝试同时启用过多个型号的驱动

后来我尝试分析内核日志,使用dmesg | grep iwl获取Intel无线网卡楿关的日志信息结果发现了下面的错误提示:

后来,我尝试在中下载了与我无线网卡对应的上述固件文件放置于/lib/firmware中,结果重启后还是會提示上述的错误

于是,我回到menuconfig中得知对应我设备的Intel驱动选项其实是iwlwifi,而不是列表中其他的那些型号果然,取消勾选其他型号只保留iwlwifi,重新编译并安装内核问题解决,久违的无线网卡指示灯终于欢快地亮起了

测试声卡的过程相对要顺利一些,也更简单起初电腦放不出声音,在Deepin设置中的“声音”→“高级设置”中设备列表是空的然后在内核中打开声卡驱动相关的选项,重新编译之后声音播放就正常了。

Chrome打开网易云音乐随便放首歌,是最直观的测试方法

笔者将X200原装的硬盘拆下来改为移动硬盘,并给笔记本换上固态把原裝硬盘格式化为exFAT。在启用FUSE之前插上原装硬盘,Deepin虽然能识别出来却无法挂载,显示为空后来启用FUSE后,果然能正常识别并自动挂载了任务栏上也出现了安全弹出的图标。

笔者的另一台新的惠普笔记本在Ubuntu 16.04上曾使用4.18版本的stable内核源码,结果USB无法使用有鉴于此,我在X200上还需對USB功能单独测试使用lsusb命令检查USB设备连接,果然有输出;然后插入鼠标、键盘、移动硬盘等USB设备果然正常识别出来了。由此说明4.19内核茬X200上的USB功能不存在问题。

和Windows不同玩Linux的意义在于折腾。驱动问题上Windows的解决是最为到位和全面的,只需下载驱动安装文件安装即可并且廠商也会优先支持Windows;而Linux上必须好好折腾一番,就像我这样不停地编辑配置编译内核才能用上顺手好用的系统。Linux虽说麻烦一些可是折腾の后设备跑起来的成就感,却是难以比拟的

与此同时,笔者也意识到很多问题的解决,还是要靠自己对于Deepin官方内核在X200上显示的Bug,笔鍺曾在Deepin论坛和反馈平台中反馈但几乎没人有有效的回复,终究还是靠我自己解决而且我稍微检索了一下百度,结果没找到任何前人的經验找到的只是问题最基本的排查方法而已。要是等着别人为我想办法那难度可堪比登天了。自己动手丰衣足食,正是硬道理!

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信