ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

VSCode远程开发Linux内核驱动

2022-07-16 19:33:39  阅读:271  来源: 互联网

标签:kernel include VSCode nfs 内核 Linux 810 home pi


受够了Vim的换台电脑就要倒腾N天配置的折磨,受够了Windows下Source Insight眼花的界面。这些软件虽然很多人在用,但是缺点也不少。然而Linux内核代码非常庞大,编译内核又需要在Linux下进行。

有没有一种能在Windows下开发又能在Windows下“编译”的方法呢?
答案就是:VSCode!

首先介绍一下基本思路:
——————————————————————————————-
1、使用VSCode远程开发进行 SSH无缝连接,在Windows下码代码的同时又能“编译”
2、使用 C/C++ 插件提供智能感知(追代码)
3、使用NFS让开发板通过网络挂载驱动生成文件目录,快速测试安装驱动(可选)

关于远程SSH请看:【VSCode远程开发配置指南


操作步骤

【创建工程文件夹】
这步我借鉴了CSDN的 Ningjianwen ,链接

【打开文件夹】
安装好或远程连接vscode后,选择 文件-打开文件夹 打开内核源码文件夹。在内核源码文件夹的根目录下会生成一个.vscode 的文件夹,该文件夹保存了你的工程配置信息。如果Ubuntu的文件资源管理器看不到,按Ctrl+H取消隐藏即可看到。

【配置C/C++ 索引】
在右下角点击C/C++配置,选择UI方式编辑配置。熟悉配置的同学也可以使用json修改。

出现如上图所示。将交叉编译器路径和头文件相对路径填入。

以我为例
编译器
--------------
/home/pi/toolchain/toolsraspi/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
#以上是我的交叉编译器绝对路径,仅供参考

定义
-------------
对于某些Android工程,如高通,该文件在out/target/product/xxx/obj/KERNEL_XXX下。一般在include/generated/autoconf.h。
请将内核include/generated/autoconf.h文件中的内容复制出来,删除#define 开头并添加 xxx = xxx 的格式,如:
CONFIG_CMD_BOOTM = 1
CONFIG_ARM = 1

包含路径
-----------------
分别对应平台架构的头文件目录和内核的头文件目录,想要获得正常的代码感知和错误提示,一下目录必须配置。以下是我的头文件相对路径,仅供参考,/**是以递归形式查找目录下的所有头文件。

/home/pi/worksapce/rok-rk3399-pc/kernel/drivers/**
/home/pi/worksapce/rok-rk3399-pc/kernel/usr/
/home/pi/worksapce/rok-rk3399-pc/kernel/include/
/home/pi/worksapce/rok-rk3399-pc/kernel/include/generated/
/home/pi/worksapce/rok-rk3399-pc/kernel/arch/arm64/include/
/home/pi/worksapce/rok-rk3399-pc/kernel/arch/arm64/include/generated/


高通android平台示例
/home/pi/workspace/8953_810_LA301/kernel/msm-3.18/drivers/**"
/home/pi/workspace/8953_810_LA301/kernel/msm-3.18/include/"
/home/pi/workspace/8953_810_LA301/kernel/msm-3.18/arch/arm64/include/"
/home/pi/workspace/8953_810_LA301/out/target/product/msm8953_64/obj/kernel/msm-3.18/include/"
/home/pi/workspace/8953_810_LA301/out/target/product/msm8953_64/obj/kernel/msm-3.18/include/generated/"
/home/pi/workspace/8953_810_LA301/out/target/product/msm8953_64/obj/kernel/msm-3.18/usr/include/"
/home/pi/workspace/8953_810_LA301/out/target/product/msm8953_64/obj/kernel/msm-3.18/arch/arm64/include/"
/home/pi/workspace/8953_810_LA301/out/target/product/msm8953_64/obj/kernel/msm-3.18/arch/arm64/include/generated

【添加宏定义】

关于如何处理autoconf.h 文件。

复制文件,用VSCode打开

编辑文件,添加宏定义

将autoconf.h中的注释删掉,选中”#define “,右键->更改所有匹配项->退格 删除所有”#define “。然后在开头添加”__KERNEL__”, “__GUN__”, “KBUILD_MODNAME = \”\””。用同样的方法,选中”CONFIG”,右键->更改所有匹配项->Ctrl+方向键→,跳转到第一个字符串的结尾,输入空格和=,最后Ctrl+A全选择,复制粘贴到 C/C++配置 的”定义”中。

【C/C++插件优化】
Ctrl + Shift + P 打开 首选项:打开设置(UI)
根据是远程连接或者是本地打开的情况选择相应的配置,再在右上角点击打开json文件,将以下配置添加到json配置中。以下配置可以屏蔽部分编译生成的零时文件,并修改代码格式化风格,修改智能感知缓存路径到工程路径下,增大索引缓存大小。

{
    "remote.autoForwardPortsSource": "output",
    "files.exclude": {
        "**/*.cmd": true,
        "**/*.o": true,
        "**/*.s": true,
        "**/*.su": true,
        "**/*.i": true
    },
    "C_Cpp.clang_format_fallbackStyle": "WebKit",
    "C_Cpp.intelliSenseCachePath": "${workspaceFolder}/.vscode",
    "C_Cpp.intelliSenseCacheSize": 10240,
    "C_Cpp.intelliSenseMemoryLimit": 10240
}

【配置NFS (可选) 】
开发板通过NFS挂载工程文件夹,编译好后直接的开发板上就能安装。

# 主机安装服务 
$sudo apt-get install nfs-kernel-server nfs-common
 #主机配置 
$sudo vim /etc/exports
#添加
#/home/pi/project/rootfs/ *(rw,sync,no_subtree_check,no_root_squash)
​
#/dir   :共享的目录
#*      :指定哪些用户可以访问
#        *  所有可以ping同该主机的用户
#        192.168.1.*  指定网段,在该网段中的用户可以挂载
#        192.168.1.12 只有该用户能挂载
#(ro,sync,no_root_squash):  权限
#ro : 只读
#rw : 读写
#sync :  同步
#no_root_squash: 不降低root用户的权限
#其他选项man 5 exports 查看
​
#Ubuntu 18.10默认的NFS不支持NFS2协议,需要手动添加协议支持
$vi /etc/default/nfs-kernel-server
#添加
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog" 

#主机重启NFS服务
$sudo service nfs-kernel-server restart
​
#开发板挂载NFS  注意主机IP地址和相对路径。如果有路由可以选择绑定IP
$sudo mount -t nfs 192.168.2.100:/home/pi/nfs/ /home/pi/nfs/
#查看
$ls /mnt
卸载NFS
$umount /mnt 

【试试看】

 

SSH远程连接并查看结构体信息

远程编译并在开发板上安装驱动模块

标签:kernel,include,VSCode,nfs,内核,Linux,810,home,pi
来源: https://www.cnblogs.com/pypyn/p/16484990.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有