Linux内核开发环境管理和搭建(Git&Vim)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/notbaron/article/details/75928745

Linux内核开发环境管理和搭建

 

Kernel官方的链接是:https://www.kernel.org,有三种版本mainlinestablelongterm,其中mainline是主线版本,stable是稳定版,longterm是长期支持版,当然就是不再支持的EOLend of life

我们使用git来完成开发环境的管理和搭建。关于Git的详细使用更可以查看链接:http://blog.csdn.net/notbaron/article/details/75799141

关于安装这些此文就跳过了,最简单的就是使用yum install git来安装吧。

如过内容偏多,可以分成几天慢慢看。

本文所用VIM插件打包下载:

http://download.csdn.net/detail/notbaron/9907972

1    创建内核目录

新建一个文件夹,在该文件夹下 使用git命令clone获取linux内核源码如下:

git clonegit://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

执行后输出如下:

Cloning into 'linux-stable'...

remote: Counting objects: 6071472, done.

remote: Compressing objects: 100% (963123/963123), done.

remote: Total 6071472 (delta 5090879), reused 6045800 (delta 5065245)

Receiving objects: 100% (6071472/6071472), 1.16 GiB | 980.00 KiB/s, done.

Resolving deltas: 100% (5090879/5090879), done.

Checking out files: 100% (60557/60557), done.

第一次会比较慢,以后就会很方便,只要下载跟新部分就好了。

查看状态:

git status  

后续更新本地的代码

git pull  

切换到分支

git checkout badman-linux-3.10   

下载源码后可以通过在源码顶层目录下执行make kernelversion命令查询源码的版本。

2    VIM就够了

VIM的强大不在此处啰嗦了(用过的都知道),但是为了达到最好效率需要大堆插件来辅助的,这里推荐一个插件管理器vim-plug。从此不用再担心插件管理了。

2.1    插件管理器安装使用

Vim-plug是一个mini的插件管理器,只有一个文件,简洁直观还支持并行安装、更新的特点。

插件管理器的链接如下,

https://github.com/junegunn/vim-plug

下载安装后复制到autoload即可。

cp plug.vim ~/.vim/autoload/

或者直接执行:

curl -fLo~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

然后打开.vimrc,输入如下内容:

callplug#begin('~/.vim/plugged') 

Plug'junegunn/seoul256.vim' 

Plug'junegunn/vim-easy-align' 

Plug 'scrooloose/nerdtree',{ 'on':  'NERDTreeToggle' } 

Plug 'tpope/vim-fireplace',{ 'for': 'clojure' } 

call plug#end() 

打开vim后执行:PlugInstall来安装插件,:PlugUpdate来更新插件,执行 :PlugClean来移除未使用的插件,:PlugUpgrade来更新vim-plug本身。PlugStatus:查看插件状态。

 

2.2    配置VIM

在安装插件时候创建了~/.vim/plugged

再创建:

~/.vim/doc

~/.vim/syntax

2.2.1    配置中文

网站下载中文帮助的文件包:

$wget http://nchc.dl.sourceforge.net/sourceforge/vimcdoc/vimcdoc-1.9.0.tar.gz

下载后安装,把解压的doc文件夹放到~/.vim/doc中。

安装后vim默认使用中文文档。若想使用英文文档,在vim中执行以下命令:

sethelplang=en

重新使用中文文档:

sethelplang=cn

查看帮助执行如下:

:helpusr_29

2.2.2 语法高亮

syntaxenable

syntaxon

如果对配色不满意,可以选择如下这个配色

colorscheme desert

再不满意就查看帮助手册吧:help syntax.txt

在在你自己的HOME下新建一个语法文件, 如下:

~/.vim/syntax/cplus.vim

内容可以执行哪些语法高亮。

参考内如:

"========================================================

"Highlight All Function

"========================================================

synmatch   cFunction"/<[a-zA-Z_][a-zA-Z_0-9]*/>[^()]*)("me=e-2

synmatch   cFunction"/<[a-zA-Z_][a-zA-Z_0-9]*/>/s*("me=e-1

hicFunction        gui=NONE guifg=#B5A1FF

 

"========================================================

"Highlight All Math Operator

"========================================================

"C math operators

synmatch       cMathOperator     display "[-+/*/%=]"

"C pointer operators

synmatch       cPointerOperator  display "->/|/."

"C logical   operators - boolean results

synmatch       cLogicalOperator  display "[!<>]=/="

synmatch       cLogicalOperator  display "=="

"C bit operators

synmatch       cBinaryOperator   display"/(&/||/|/^/|<</|>>/)=/="

"More C logical operators - highlight in preference to binary

synmatch       cLogicalOperator  display "&&/|||"

synmatch       cLogicalOperatorError display"/(&&/|||/)="

 

"Math Operator

hicMathOperator            guifg=#3EFFE2

hicPointerOperator         guifg=#3EFFE2

hicLogicalOperator         guifg=#3EFFE2

hicBinaryOperator          guifg=#3EFFE2

hicBinaryOperatorError     guifg=#3EFFE2

hicLogicalOperator         guifg=#3EFFE2

hi cLogicalOperatorError    guifg=#3EFFE2

2.2.3 代码跳转ctags

Tag文件(标签文件)可是程序员的宝贝, Linux内核源码都提供了"make tags"这个选项.

tags 文件是由ctags程序产生的一个索引文件, ctags"Exuberant Ctags",Unix上面ctags程序的替代品,是大多数Linux发行版上默认的ctags程序。如果你在读程序时看了一个函数调用、变量,、宏等等,想知道它们的定义在哪,当光标在某个函数或变量上时, 按下"Ctrl+]", 光标会自动跳转到其定义处。这个功能是需要安装的,先下载ctags

官网链接:http://ctags.sourceforge.net/

红帽已经自带,直接通过yum源安装即可。

       在内核源码最上层命令中执行: ctags -R

会在当前目录下会生成一个 tags 文件

需要设置::set tags=~/linux-4.13-rc1/tags

       可以直接写到.vimrc中。

       然后编辑一个c文件光标移到函数出,就可以按下Ctrl+]来跳转了。

       按下Ctrl+T还能回来的,是不是很神奇?

       PS:增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:#ctags -R

2.2.4 窗口分割浏览TagList

"Tag List"是一个用来浏览源代码的Vim插件,可以高效地浏览各种不同语言编写的源代码。下载地址:https://sourceforge.net/projects/vim-taglist/files/

解压得到docplugin的文件分别放到~/.vim/doc~/.vim/plugin(注意不是plugged)中。

~/.vimrc文件中添加下面两句:

letTlist_Show_One_File=1

letTlist_Exit_OnlyWindow=1

然后再进入vim,输入:Tlist

需要帮助请输入::help taglist.txt

      如果没有成功那肯定是上面哪里出问题了,再重新看下本节。

2.2.5 文件浏览器和窗口管理器

下载路径:http://www.vim.org/scripts/script.php?script_id=95,

安装同taglist

或者在参考链接下面将本文所有使用的插件都打包上传了,可以直接下载使用。

 

~/.vimrc中增加下面两句

letg:winManagerWindowLayout='FileExplorer|TagList'

nmapwm :WMToggle<cr>

进入VIM后,直接在命令行模式下输入wm回车即可。

       是不是很高级,取消再输入一次wm.

查看帮助就使用如下命令:

:helpwinmanager

2.2.6 cscope加强版ctags

官方下载地址如下:

http://cscope.sourceforge.net/

       可以在本文最后找到所有包的打包下载地址。

       这个和其他插件不同,需要编译安装

#./configure

#make&& make install

先在~/vimrc中增加一句:

setcscopequickfix=s-,c-,d-,i-,t-,e-

在源码根目录中执行如下:

$ cscope -Rbq

会生成三个文件, cscope.in.out, cscope.out, cscope.po.out

增加如下这条命令到.vimrc

       cs add ~/linux-3.10/cscope.out ~/linux-3.10

       PS:路径每个用户应该都是有差异的,我这边是一个内核的文件夹。

然后可以查找函数相关了:

查找函数func的定义,用命令:

cs find g func

查找在哪些被调用过(这个是ctags做不到的)

cs find c func

如果调用很多可以输入

:cw来找更快捷。

cscope的主要功能是通过子命令"find"来实现的

"cscope find"的用法如下:

cs find c|d|e|f|g|i|s|t name

0 s 查找本 C 符号(可以跳过注释)

1 g 查找本定义

2 d 查找本函数调用的函数

3 查找调用本函数的函数

4 t   查找本字符串

6 e 查找本 egrep 模式

7 f   查找本文件

8 i   查找包含本文件的文件

reset命令可以重新初始化所有连接。 

用法  : cs reset 

 

2.2.7 多文件编辑

插件叫做:minibufexpl.vim,可以在文章后面打包下载。

.vimrc中加入如下:

let g:miniBufExplMapCTabSwitchBufs = 1

let g:miniBufExplMapWindowNavVim = 1

当只编辑一个文件的时候 MiniBufExplorer派不上用场, 但是当打开第二个文件时候, MiniBufExplorer窗口就自动弹出来。光标置于这个窗口时,就可以使用tab按键了,不过光标移到那个窗口是由小技巧的,要按下ctrl键才可以移到。

狭长的窗口就是MiniBufExplore,列出了当前所有已经打开的文件.

也在命令模式下:

:bn   打开当前buffer的下一个buffer

:bp  打开当前buffer的前一个buffer

:b"num"   打开指定的buffer"num"指的是buffer开始的那个数字

2.2.8 文件相互切换

在平常的编码过程中源文件与头文件间进行切换是平常的事, 直接用vim固然可以, 但是只用一个按键就切换过来了那就方便很多了。

       装上a.vim插件后,就有如下命令:

:A    在新Buffer中切换到c/h文件

:AS 横向分割窗口并打开c/h文件

:AV 纵向分割窗口并打开c/h文件

:AT 新建一个标签页并打开c/h文件

2.2.9 工程中超找插件

插件名为grep.vim 

vim 有自己的查找功能,shell中的grep比起来还是有些差距的,有了插件之后,可以使用如下命令:

:Grep    按照指定的规则在指定的文件中查找

:Rgrep  同上, 但是是递归的grep

:GrepBuffer       在所有打开的缓冲区中查找

:Bgrep  同上

:GrepArgs   vimargument filenames (:args)中查找

:Fgrep  运行fgrep

:Rfgrep 运行递归的fgrep

:Egrep  运行egrep

:Regrep      运行递归的egrep

:Agrep  运行agrep

:Ragrep      运行递归的agrep

输入:Grep

在最下面的命令行会显示:

Searchin files:*

默认是该目录下的所有文件, 此时你还可以编辑该行, 比如你只想搜索源码文件,例如:

Searchin files: *.c *.h

2.2.10         高亮书签

插件叫做visualmark.vim,安装后执行mm即可高亮标签。

"mm",怎么样, 发现光标所在的行变高亮,再按下就关掉了高亮。

2.2.11         自动补全

该功能要tags文件的支持。

.vimrc中加入一行:

filetype pluginindent on

setcompleteopt=longest,menu

编辑文件后,进入插入模式:

光标放在"->"后面然后按下"Ctrl+X Ctrl+O"或者ctrl+n

vim中的其他补全方式还有:

Ctrl+XCtrl+L     整行补全

Ctrl+XCtrl+N    根据当前文件里关键字补全

Ctrl+XCtrl+K     根据字典补全

Ctrl+XCtrl+T     根据同义词字典补全

Ctrl+XCtrl+I      根据头文件内关键字补全

Ctrl+XCtrl+]      根据标签补全

Ctrl+XCtrl+F     补全文件名

Ctrl+XCtrl+D    补全宏定义

Ctrl+XCtrl+V     补全vim命令

Ctrl+XCtrl+U    用户自定义补全方式

Ctrl+XCtrl+S     拼写建议

2.2.12         快速补全

上节学会了自动补全代码的功能, 按下"Ctrl+X Ctrl+O"就搞定了,要按四个键为此开发了supertab.vim这个插件。

~/.vimrc文件中加上这两句:

let g:SuperTabRetainCompletionType=2

letg:SuperTabDefaultCompletionType="<C-X><C-O>"

准备按"Ctrl+XCtrl+O"的时候直接按<Tab>就好了

其中letg:SuperTabDefaultCompletionType="<C-X><C-O>"

设置按下<Tab>后默认的补全方式, 默认是<C-P>, " 现在改为<C-X><C-O>.

其中letg:SuperTabRetainCompletionType=2

" 0 - 不记录上次的补全方式 

" 1 - 记住上次的补全方式,直到用其他的补全命令改变它 

" 2 - 记住上次的补全方式,直到按ESC退出插入模式为止

VIM的熟练使用和游泳一样需要不停的练习使用再练习再使用,渐渐的孰能生巧。

2.3    vimrc

本文修改的最后vimrc文件内容如下:

syntax enable

syntax on

colorscheme desert

set tags=/root/linux-4.13-rc1/tags

 

 

let Tlist_Show_One_File=1

let Tlist_Exit_OnlyWindow=1

 

let g:winManagerWindowLayout='FileExplorer|TagList'

nmap wm :WMToggle<cr>

 

set cscopequickfix=s-,c-,d-,i-,t-,e-

 

cs add /root/linux-4.13-rc1/cscope.out /root/linux-4.13-rc1

 

let g:miniBufExplMapCTabSwitchBufs = 1

let g:miniBufExplMapWindowNavVim = 1

 

filetype plugin indent on

set completeopt=longest,menu

 

let g:SuperTabRetainCompletionType=2

let g:SuperTabDefaultCompletionType="<C-X><C-O>"

 

3    编译运行

讲了那么多VIM配置,感觉有些跑题,其实本篇本意是搭建一个Linux的内核开发环境,当然VIM配置也是开发环境搭建的一部分就像使用其他IDE一样。下面把内核编译的几个命令过一下。

内核编译需要安装gcc,ncurses-dev,openssl-devel等相关包,这个可以根据提示进行安装即可。

#make menuconfig

#make –j20

这个编译时间就取决于你机器的并发能力了,如果有100个core就可以选择make –j100来编译。

       #makemodules_install

       #makeinstall

4    参考链接

VIM插件参考:https://zhuanlan.zhihu.com/p/24742679?refer=hack-vim

VIM官方插件:

http://www.vim.org/scripts/script_search_results.php?order_by=creation_date&direction=descending

本文所用插件打包下载:http://download.csdn.net/detail/notbaron/9907972

 

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页