百问网早已制做好了完备的Ubuntu镜像,可以从这儿下载:
我们也正在(2022.10.17开始)使用纯粹的Ubuntu环境开始教驱动入门,免费学习。
假如你使用我们的Ubuntu镜像中文linux操作系统,这么可以略过后面第1~6章的内容,直接从第7章开始看。
1.安装基本开发工具
git clone https://e.coding.net/weidongshan/DevelopmentEnvConf.git
cd DevelopmentEnvConf
sudo ./Configuring_ubuntu.sh
2.安装vscode2.1从官网下载安装
在Ubuntu中使用浏览器从从下载deb包,执行:
cd /home/book/Downloads
sudo dpkg -i code_1.72.2-1665614327_amd64.deb
2.2安装插件
打开vscode后,点击两侧图标:
依次输入下述插件名子,安装:
我们早已安装的插件有这种:
2.3配置clangd
2.3.1下载clangd
后面只是安装clangd插件,它的使用还须要一个clangd程序。
我们之后使用vscode打开C文件时,会提示你安装clangd程序,它会安装最先版本(版本15),然而这个版本有一些Bug,所以我们手工安装版本13。
在Ubuntu中使用浏览器打开,下载Linux安装包:
把下载到的clangd-linux-13.0.0.zip放在/home/book目录下,执行解压命令:
cd /home/book
unzip clangd-linux-13.0.0.zip
2.3.2配置clangd
在vscode界面按右图步骤打开setting.json文件:
在setting.json中写入如下内容(我们第1次打开源码目录后,这个文件可能被手动更改,你须要再度更改它):
{
"C_Cpp.default.intelliSenseMode": "linux-gcc-arm",
"C_Cpp.intelliSenseEngine": "Disabled",
"clangd.path": "/home/book/clangd_13.0.0/bin/clangd",
"clangd.arguments": [
"--log=verbose",
],
}
C/C++插件里的intellisense和clangd是冲突的,假如我们没有手工设置setting.jsonlinux安装搜狗输入法,当使用vscode打开C文件时时会提示严禁intellisense,点击滑鼠即可严禁。它的本质也是更改setting.json,它会写入如下文字:
"C_Cpp.intelliSenseEngine": "disabled",
里面文件有Bug,其中的"disabled"应当改为"Disabled"。
2.3.3安装bear
在vscode中使用clangd,要实现精确跳转,须要使用bear剖析源码生成compile_commands.json。
执行如下命令安装:
sudo apt instll bear
2.4常用快捷键
打开C文件后,在文件里点击右键就可以看见大部份快捷键。
输入文件名打开文件: Ctrl + P
跳到某行: Ctrl + G + 行号
打开文件并跳到某行: Ctrl + p 文件名:行号
列出文件里的函数 : Ctrl + Shift + O,可以输入函数名跳转
函数/变量跳转: 按住Ctrl同时使用鼠标左键点击、F12
前进: Ctrl + Shift + -
后退: Ctrl + Alt + -
列出引用 : Shift + F12
查找所有引用 : Alt + Shift + F12
切换侧边栏展示/隐藏: Ctrl + B
打开命令菜单: Ctrl + Shift + P
手动触发建议: Ctrl + Space
手动触发参数提示: Ctrl + Shift + Space
打开/隐藏终端: Ctrl + `(Tab上方的那个键)
重命名符号: F2
当前配置调试: F5
上/下滚编辑器: Ctrl + ↑/↓
搜索/替换 : Ctrl + F/H
高亮文字:shift + alt + z
取消高亮:shift + alt + a
3.使用WindTerm
3.1安装WindTerm
WindTerm是Linux环境下好用的终端软件,GUI界面、支持ssh、串口等合同,可以记录历史命令。
我们使用它来打开并口操作开发板。
在Ubuntu中使用浏览器打开,下载Linux版本的软件包:
把下载到的WindTerm_2.5.0_Linux_Portable_x86_64.tar.gz放在/home/book目录下,执行解压命令:
cd /home/book
tar xzf WindTerm_2.5.0_Linux_Portable_x86_64.tar.gz
cd WindTerm_2.5.0/
chmod +x WindTerm
之后就可以在桌面系统打开终端后执行以下命令打开WindTerm:
cd /home/book/WindTerm_2.5.0/
sudo ./WindTerm
3.3配置WindTerm
WindTerm的使用方式可以参考:
本节目标:
3.3.1解决权限问题
执行如下命令把book用户装入组(dialout、tty)即可:
sudo newgrp dialout tty
sudo usermod -a -G dialout book
sudo usermod -a -G tty book
3.3.2装入启动栏
创建一个文件`/usr/share/applications/windterm.desktop`linux安装搜狗输入法,内容如下:
[Desktop Entry]
Name=WindTerm
Comment=A professional cross-platform SSH/Sftp/Shell/Telnet/Serial terminal
GenericName=Connect Client
Exec=/home/book/WindTerm_2.5.0/WindTerm
Type=Application
Icon=/home/book/WindTerm_2.5.0/windterm.png
StartupNotify=false
StartupWMClass=Code
Categories=Application;Development
Actions=new-empty-window
Keywords=windterm
[Desktop Action new-empty-window]
Name=New Empty Window
Icon=/home/book/WindTerm_2.5.0/windterm.png
Exec=/home/book/WindTerm_2.5.0/WindTerm
之后降低可执行权限、并启动程序:
sudo chmod +x /usr/share/applications/windterm.desktop
/usr/share/applications/windterm.desktop
最后如右图操作,之后就可以在Ubuntu两侧的启动栏点击滑鼠启动WindTerm:
4.安装搜狗输入法
根据说明操作:
切换中英文快捷键:Ctrl+空格。
5.安装估算器
执行如下命令安装:
sudo snap install uno-calculator
之后启动它、添加进Ubuntu两侧的启动栏,入右图操作:
6.下载和编译内核
以百问网IMX6ULL_Pro开发板为例。
6.1下载内核
执行如下命令:
$ git clone https://e.coding.net/codebug8/repo.git
$ mkdir -p 100ask_imx6ull-sdk && cd 100ask_imx6ull-sdk
$ ../repo/repo init -u https://gitee.com/weidongshan/manifests.git -b linux-sdk -m imx6ull/100ask_imx6ull_linux4.9.88_release.xml --no-repo-verify
$ ../repo/repo sync -j4
6.2配置工具链
执行如下命令:
gedit ~/.bashrc
在最后加入如下内容:
export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
重新关掉、打开终端。
6.3编译内核
执行如下命令:
cd /home/book/100ask_imx6ull-sdk/Linux-4.9.88
make 100ask_imx6ull_defconfig
make zImage -j4
重新关掉、打开终端。
7.使用vscode阅读内核源码7.1生成compile_commands.json
bear命令拿来生成compile_commands.json,它的用法如下:
bear make [其他make本身的参数]
它会记录make过程编译文件时用到的命令。
编译内核时红旗linux操作系统,使用如下命令:
// 如果之前曾经编译过内核,要清除掉
make clean
// 然后重新编译
bear make zImage -j 4
编译成功后才会在当前目录下得到文件compile_commands.json,须要如下更改:
在gedit中使用快捷键"Ctrl+H"即可如下操作:
7.2使用vscode打开内核7.2.1打开目录
有两种方式:
在vscode中入下操作,选择、打开目录"/home/book/100ask_imx6ull-sdk/Linux-4.9.88"
在终端里步入内核目录,执行命令
code .
7.2.2触发clangd构建索引
在vscode里打开任意一个C文件,才会触发clangd构建索引:
若果没有听到上述状态,可以如下处理:
在创建索引的过程中,可以使用如下命令查看.cache目录,它会不断变大(最终大小在60M左右):
7.2.3验证
8.使用vscode阅读内核外部的源码
例如我们编撰了hello驱动程序,它用到内核里的头文件、函数,我们点击hello驱动里的函数时,想打开内核的文件。
须要创建一个workspace:
8.1创建workspace
使用vscode打开内核目录,之后保存为WorkSpace,如下操作:
保存在内核源码的上一层目录里:
8.2把驱动目录加入workspace
假定驱动程序坐落这个目录:``
8.2.1编译驱动
使用如下命令编译,它会生成compile_commands.json:
cd /home/book/nfs_rootfs/drivers_projects/01_hello_drv/
bear make
8.2.2更改compile_commands.json
把上面的"cc"全部更改为"arm-buildroot-linux-gnueabihf-gcc"。
8.2.3加入workspace
8.3验证
9.常见错误9.1未能跳转
第1步,确认早已关掉intellisense:
第2步,确认有clangd:
第3步,确认源码目录下有compile_commands.json,而且上面有源码、“cc"被改成了"arm-buildroot-linux-gnueabihf-gcc”:
第4步,在vscode里打开C文件后,确认.cache目录生成了: