在Ubuntu中搭建嵌入式Linux开发环境

百问网已经制作好了完备的Ubuntu镜像,可以从这里下载:

链接:https://pan.baidu.com/s/1vw4VUV_Mvt0HXz8IC66ACg
提取码:iftb

我们也正在(2022.10.17开始)使用纯粹的Ubuntu环境开始教驱动入门,免费的,感兴趣者也加上面的群。

如果你使用我们的Ubuntu镜像,那么可以略过前面第1~6章的内容,直接从第7章开始看。

1. 安装基本开发工具

git clone https://e.coding.net/weidongshan/DevelopmentEnvConf.git
cd DevelopmentEnvConf
sudo ./Configuring_ubuntu.sh

2. 安装vscode

2.1 从官网下载安装

在Ubuntu中使用浏览器从从https://code.visualstudio.com/下载deb包,执行:

cd /home/book/Downloads
sudo dpkg -i code_1.72.2-1665614327_amd64.deb

2.2 安装插件

打开vscode后,点击左侧图标:

依次输入下列插件名字,安装:

  • C/C++
  • C/C++ Extension Pack
  • C/C++ Snippets
  • Code Runner
  • Code Spell Checker
  • compareit
  • DeviceTree
  • Tabnine AI Autocomplete
  • Bracket Pair Colorization Toggler
  • Rainbow Highlighter
    • 高亮文字:shift + alt + z
    • 取消高亮:shift + alt + a
  • Arm Assembly
  • Chinese
  • Hex Editor
  • One Dark Pro
  • Clangd
  • Markdown All in One
  • Markdown Preview Enhanced

我们已经安装的插件有这些:

2.3 配置clangd

2.3.1 下载clangd

前面只是安装clangd插件,它的使用还需要一个clangd程序。

我们以后使用vscode打开C文件时,会提示你安装clangd程序,它会安装最先版本(版本15),但是这个版本有一些Bug,所以我们手工安装版本13。

在Ubuntu中使用浏览器打开https://github.com/clangd/clangd/releases/tag/13.0.0,下载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.json,当使用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中使用浏览器打开https://github.com/kingToolbox/WindTerm/releases/tag/2.5.0,下载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的使用方法可以参考:https://zhuanlan.zhihu.com/p/468501270

本节目标:

  • 解决问题:我们使用WindTerm打开/dev/ttyUSB0或/dev/ttyACM0等串口时,不加sudo命令就会碰到权限问题
  • 方便使用:我们想在Ubuntu左侧启动栏点击鼠标就启动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,内容如下:

[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. 安装搜狗输入法

按照说明操作:https://shurufa.sogou.com/linux/guide

切换中英文快捷键: 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过程编译文件时用到的命令。

编译内核时,使用如下命令:

// 如果之前曾经编译过内核,要清除掉
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建立索引:

如果没有看到上述状态,可以如下处理:

  • 按照《2.3.2 配置clangd》重新编辑setting.json
  • 重新启动vscode、重新打开内核源码目录、重新打开C文件

在创建索引的过程中,可以使用如下命令查看.cache目录,它会不断变大(最终大小在60M左右):

7.2.3 验证

8. 使用vscode阅读内核外部的源码

比如我们编写了hello驱动程序,它用到内核里的头文件、函数,我们点击hello驱动里的函数时,想打开内核的文件。

需要创建一个workspace:

  • 里面含有内核目录、hello驱动源码目录
  • 内核目录下有compile_commands.json
  • hello驱动源码目录下有compile_commands.json

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目录生成了:

在Ubuntu中搭建嵌入式Linux开发环境相关推荐

  1. Linux学习之云服务器搭建嵌入式Linux开发环境

    Linux学习之云服务器搭建嵌入式Linux开发环境 第一步:购买云服务器 进入腾讯云官方网站腾讯云官方网站 选择云+校园云+校园 进入控制台 将云服务器系统设置为Ubuntu系统 使用Xshell6 ...

  2. ubuntu20.04.1 64位搭建嵌入式linux开发环境

    目录 背景 开发环境的搭建 1.交叉编译工具的安装 2.开发工具和依赖库的安装 2.1. 必需部分 2.2.可选部分 ubuntu20.04.1 64位配置和编译Linux3.0内核 背景 市面上的嵌 ...

  3. 在Windows使用VSCode搭建嵌入式Linux开发环境

    在Windows使用VSCode搭建嵌入式Linux开发环境 百问网已经制作好了完备的Ubuntu镜像,可以从这里下载: 链接:https://pan.baidu.com/s/1vw4VUV_Mvt0 ...

  4. 构建嵌入式系统软件开发环境-VMware的安装及搭建嵌入式Linux开发环境

    嵌入式系统操作系统 目前流行的嵌入式操作系统主要有VxWorks.WindowsCE.Linux等,由于Linux的源码开放性.内核可裁剪性.在图像处理.文件管理及多任务支持等诸多方面的特点,使得它成 ...

  5. 嵌入式linux编译环境搭建,嵌入式Linux开发环境搭建

    整理下嵌入式Linux开发环境搭建过程笔记. 一.制作u-boot.bin文件: tar xjf u-boot-1.1.6.tar.bz2 cd u-boot-1.1.6 patch -p1 < ...

  6. Linux开发(1):搭建嵌入式Linux开发环境

    在讲述详细的开发环境搭建之前,先大概讲讲本文介绍了哪些内容 首先,我们是在Windows下通过VMware运行虚拟机Ubuntu来运行主机端的Linux,然后再通过串口线连接电脑和Linux开发板 那 ...

  7. 从0开始在ubuntu18.04上搭建嵌入式Linux开发环境以及嵌入式Qt5.6开发环境

    博客中提到的一些工具文件都可以在该链接中下载:https://pan.baidu.com/s/10r4kku8C0bt8vLampOyvWQ 目录 一  Oflash软件通过openJtag下载u-b ...

  8. 嵌入式linux开发环境搭建(VMware16.0.0+Ubuntu16.04.3_X64)

    目录 一.安装VMware 1.VMware介绍 2.安装VMware16.0.0 二.安装ubuntu16.04.3 LTS 1.Ubuntu介绍 2.下载安装包iso 3.安装 四.新安装Ubun ...

  9. 使用qemu搭建arm嵌入式linux开发环境

    qemu搭建arm虚拟嵌入式linux开发环境 1.前言 1.安装qemu与arm交叉编译工具 2.Linux内核与设备树编译 3.busybox根文件系统制作 4.使用u-boot加载Linux内核 ...

  10. 嵌入式Linux开发环境搭建-(4)安装交叉编译工具链

    在ubuntu16.04.2中,安装交叉编译工具链 在ubuntu中进行嵌入式应用程序开发,安装交叉编译工具链是不可缺少的一个环节. PC操作系统:ubuntu16.04.2 LTS 开发板:天嵌科技 ...

最新文章

  1. 是什么引起数据中心机房事故频发,是天灾还是人祸?
  2. sql中“delete from 表名”表示_SQL查询语句知识点总结
  3. Fiddler2用于手机抓包时的配置方法
  4. 【R语言】如何直接调取Wind、iFinD数据接口教程
  5. 矩阵连乘问题算法思想_动态规划之矩阵连乘问题
  6. go 学习笔记之值得特别关注的基础语法有哪些
  7. 以一次失败的沟通,来聊聊技术人员沟通中常见的几个问题
  8. 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)
  9. java念整数 你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。 如输入1234,则输出: yi er san si
  10. mp4v2再学习 -- Linux 下安装说明
  11. Python-爬虫(xpath数据解析,爬取信息实战)
  12. 可以玩所有游戏的计算机配置,笔者教你玩大型游戏的电脑配置
  13. 通过response返回json数据到前端
  14. 记录春运返乡人员回家过程 快手服务“暖心返乡车队”
  15. 梦寐的电子市场终于可以去了哦!o(∩_∩)o...哈哈
  16. 阿里巴巴王帅就改名天猫给员工的公开信
  17. B端产品经理的心得之如何搞定客户
  18. 技术分享:逆向海盗船k95机械键盘
  19. 为什么要使用UTF-8?
  20. 指数分布族(Exponential Family)相关公式推导及在变分推断中的应用

热门文章

  1. 软件成分分析(SCA)完全指南
  2. 适合小白使用的python编辑器_5个适合小白的Python开发必备工具(推荐)
  3. badboy使用手册
  4. 原生js获取html根元素,JS获取屏幕高度的简单实现代码
  5. 【期末复习】计算机算法设计与分析
  6. amos调节变量怎么画_AMOS结构方程教程,调节效应分析操作与结果的详细解读 ——【杏花开生物医药统计】...
  7. amos里CFA可行性辨别结果怎么看_本科毕业论文做问卷和数据分析应该怎么着手?(1)...
  8. mescroll下拉刷新上拉加载
  9. 固态硬盘是什么接口_硬盘接口/SSD固态硬盘
  10. JDK动态代理和CGLIB动态代理介绍