目录
一 安装visual studio code(简称vscode)
二 vscode新建工作空间
三 添加头文件搜索路径
四 添加宏定义
五 按F12或者"Ctrl+单击"可快速定位到定义与自动补全功能
六 设置左侧目录不自动展开
七 设置隐藏文件夹
八 编译生成可执行文件
一 安装visual studio code(简称vscode)
方式一: 直接在ubuntu自带应用商店搜索安装(该方法可能导致无法在vscode中输入中文,推荐使用方式二).
方式二: 官网下载deb安装包后执行 sudo dpkg -i XXX.deb 或者从文件夹双击.下载链接:https://code.visualstudio.com/Download
二 vscode新建工作空间
1. 安装好vscode后,打开程序,在欢迎界面点击"Add workspace folder"然后找到linux-3.4.2文件夹,该文件夹是交叉编译过后的linux源码,如何配置并交叉编译linux内核不是本文重点,这里略过.
2. 新建一个文件夹linux_drv ,该文件夹是用来保存你自己的编写的驱动还有Makefile文件的,文件名与路径随意. 然后在vscode软件中点击"File->add folder to workspace"
3. "File->save workspace as ...".保存工作空间,命名vscode_workspace,名字与路径随意.
三 添加头文件搜索路径
按快捷键"Ctrl + Shift + P", 然后搜索>Edit configurations ,单击后,会打开一个c_cpp_properties.json文件,该文件位置可以把鼠标放到标签栏下查看,一般位于隐藏的.vscode下, 按照如下方式添加头文件, 你需要根据自己的路径,还有开发板类型选择,我这里使用的是linux-3.4.2的内核, s3c2440的开发板.
"includePath": [
"${workspaceFolder}/**",
"/home/ningjw/linux-3.4.2/include",
"/home/ningjw/linux-3.4.2/arch/arm/include",
"/home/ningjw/linux-3.4.2/arch/arm/plat-samsung/include",
"/home/ningjw/linux-3.4.2/arch/arm/mach-s3c24xx/include"
],
四 添加宏定义
1. 宏定义也是在c_cpp_properties.json文件中添加,放在"defines": [ ] 中的方括号中.
2. 宏定义文件位于linux-3.4.2/include/generated/autoconf.h文件中, 这里需要复制一份autoconf.h对该文件进行修改: 原来的格式为 #define CONFIG_IP6_NF_MATCH_AH_MODULE 1 需要修改为 "CONFIG_IP6_NF_MATCH_AH_MODULE 1"
3. 小编使用sublime text3的列编辑模式对该文件进行修改.
删除文件头部的/* */注释
Ctrl+A 全选
Ctrl+Shift+L 进入列选模式
方向键定位到列尾,添加英文双引号,添加英文逗号,
在文件头部添加 "__KERNEL__",
4.按上述修改好后添加到"defines": [ ] 中的方括号中,会发现还会报错,继续修改, 定位到报错处,发现是由于双引号引起的,将双引号前加一个转义字符 ,如下图所示,另外还需要去掉最后一个宏的逗号, c_cpp_properties.json就修改完成了.
5. 需要保证liux-3.4.2与linux_drv文件夹下的.vscode目录下都有这样的一份c_cpp_properties.json文件,该文件可以多带带保存下来,下次直接复制粘贴就行.完整的文件如下:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/home/ningjw/linux-3.4.2/include",
"/home/ningjw/linux-3.4.2/arch/arm/include",
"/home/ningjw/linux-3.4.2/arch/arm/plat-samsung/include",
"/home/ningjw/linux-3.4.2/arch/arm/mach-s3c24xx/include"
],
"defines": [
"__KERNEL__",
"CONFIG_IP6_NF_MATCH_AH_MODULE 1",
"CONFIG_NLS_CODEPAGE_861_MODULE 1",
"CONFIG_NF_CONNTRACK_H323_MODULE 1",
"CONFIG_SCSI_DMA 1",
"CONFIG_KERNEL_GZIP 1",
"CONFIG_IP_NF_TARGET_REDIRECT_MODULE 1",
"CONFIG_CRC32 1",
"CONFIG_I2C_BOARDINFO 1",
"CONFIG_HAVE_AOUT 1",
"CONFIG_AEABI 1",
"CONFIG_MTD_NAND_S3C2410 1",
"CONFIG_BT_RFCOMM_MODULE 1",
"CONFIG_LEDS_TRIGGER_HEARTBEAT_MODULE 1",
"CONFIG_XZ_DEC_IA64 1",
"CONFIG_INOTIFY_USER 1",
"CONFIG_S3C2440_XTAL_16934400 1",
"CONFIG_NF_CONNTRACK_NETBIOS_NS_MODULE 1",
"CONFIG_NETWORK_FILESYSTEMS 1",
"CONFIG_CRYPTO_MD4_MODULE 1",
"CONFIG_BT_HCIBFUSB_MODULE 1",
"CONFIG_ARCH_SUSPEND_POSSIBLE 1",
"CONFIG_INLINE_WRITE_UNLOCK_IRQ 1",
"CONFIG_LEDS_PCA955X_MODULE 1",
"CONFIG_BLK_DEV_NBD_MODULE 1",
"CONFIG_TCP_CONG_HTCP_MODULE 1",
"CONFIG_EXT4_FS_POSIX_ACL 1",
"CONFIG_NETFILTER_XT_MATCH_HELPER_MODULE 1",
"CONFIG_SSB_POSSIBLE 1",
"CONFIG_NF_NAT_SIP_MODULE 1",
"CONFIG_S3C_ADC 1",
"CONFIG_NETFILTER_XT_MATCH_STATISTIC_MODULE 1",
"CONFIG_NLS_CODEPAGE_855_MODULE 1",
"CONFIG_USB_OHCI_LITTLE_ENDIAN 1",
"CONFIG_FSNOTIFY 1",
"CONFIG_BLK_DEV_LOOP_MIN_COUNT 8",
"CONFIG_INET6_TUNNEL_MODULE 1",
"CONFIG_NF_CONNTRACK_SIP_MODULE 1",
"CONFIG_CRYPTO_MANAGER_DISABLE_TESTS 1",
"CONFIG_HAVE_KERNEL_LZMA 1",
"CONFIG_IP_NF_QUEUE_MODULE 1",
"CONFIG_DEFAULT_SECURITY_DAC 1",
"CONFIG_KTIME_SCALAR 1",
"CONFIG_IP6_NF_MANGLE_MODULE 1",
"CONFIG_SCSI_CONSTANTS 1",
"CONFIG_NETFILTER_XT_MATCH_REALM_MODULE 1",
"CONFIG_BT_HCIBPA10X_MODULE 1",
"CONFIG_S3C2410_WATCHDOG 1",
"CONFIG_IPV6_MODULE 1",
"CONFIG_CRYPTO_AEAD_MODULE 1",
"CONFIG_BQL 1",
"CONFIG_DEFAULT_TCP_CONG "cubic"",
"CONFIG_UEVENT_HELPER_PATH "/sbin/hotplug"",
"CONFIG_USB_DEVICEFS 1",
"CONFIG_CPU_LLSERIAL_S3C2440_ONLY 1",
"CONFIG_USB_STORAGE_USBAT_MODULE 1",
"CONFIG_NF_NAT_PROTO_GRE_MODULE 1",
"CONFIG_NLS_ISO8859_7_MODULE 1",
"CONFIG_MMC_S3C_PIO 1",
"CONFIG_S3C24XX_GPIO_EXTRA 0",
"CONFIG_IP6_NF_TARGET_REJECT_MODULE 1",
"CONFIG_WLAN 1",
"CONFIG_S3C2410_CLOCK 1",
"CONFIG_NAMESPACES 1",
"CONFIG_DEFAULT_MESSAGE_LOGLEVEL 4",
"CONFIG_SERIAL_SAMSUNG 1",
"CONFIG_NETFILTER_XT_TARGET_RATEEST_MODULE 1",
"CONFIG_LEGACY_PTYS 1",
"CONFIG_XFRM_IPCOMP_MODULE 1",
"CONFIG_CRYPTO_RNG2_MODULE 1",
"CONFIG_NETFILTER_NETLINK_QUEUE_MODULE 1",
"CONFIG_MSDOS_FS 1",
"CONFIG_CFG80211_MODULE 1",
"CONFIG_NLS_CODEPAGE_1250_MODULE 1",
"CONFIG_HAVE_PROC_CPU 1",
"CONFIG_LZO_DECOMPRESS 1",
"CONFIG_IOMMU_SUPPORT 1",
"CONFIG_NLS_CODEPAGE_862_MODULE 1",
"CONFIG_NFSD_MODULE 1",
"CONFIG_USB 1",
"CONFIG_CRYPTO_HMAC_MODULE 1",
"CONFIG_ETHERNET 1",
"CONFIG_BRANCH_PROFILE_NONE 1",
"CONFIG_SCSI_SCAN_ASYNC 1",
"CONFIG_CRC_ITU_T_MODULE 1",
"CONFIG_DQL 1",
"CONFIG_FRAMEBUFFER_CONSOLE 1",
"CONFIG_SND_SEQUENCER_MODULE 1",
"CONFIG_IP_NF_ARPTABLES_MODULE 1",
"CONFIG_BCMA_POSSIBLE 1",
"CONFIG_FORCE_MAX_ZONEORDER 11",
"CONFIG_SND_SOC 1",
"CONFIG_PRINTK 1",
"CONFIG_NF_CONNTRACK_PROC_COMPAT 1",
"CONFIG_TIMERFD 1",
"CONFIG_MTD_CFI_I2 1",
"CONFIG_CRYPTO_AUTHENC_MODULE 1",
"CONFIG_SHMEM 1",
"CONFIG_MTD 1",
"CONFIG_HAVE_ARCH_JUMP_LABEL 1",
"CONFIG_MMC_BLOCK_MINORS 8",
"CONFIG_NLS_CODEPAGE_850 1",
"CONFIG_DNOTIFY 1",
"CONFIG_INPUT_MOUSEDEV 1",
"CONFIG_CRYPTO_DES_MODULE 1",
"CONFIG_ENABLE_MUST_CHECK 1",
"CONFIG_NLS_CODEPAGE_437 1",
"CONFIG_MTD_NAND_IDS 1",
"CONFIG_EXPORTFS_MODULE 1",
"CONFIG_SND_MIXER_OSS_MODULE 1",
"CONFIG_IP6_NF_MATCH_MH_MODULE 1",
"CONFIG_SERIO 1",
"CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS 1",
"CONFIG_RTC_INTF_SYSFS 1",
"CONFIG_USB_EMI62_MODULE 1",
"CONFIG_LEDS_TRIGGER_TIMER_MODULE 1",
"CONFIG_SND_OSSEMUL 1",
"CONFIG_HAVE_BPF_JIT 1",
"CONFIG_ZLIB_INFLATE 1",
"CONFIG_DEBUG_LL 1",
"CONFIG_HWMON 1",
"CONFIG_NLS_ISO8859_2_MODULE 1",
"CONFIG_IP_PNP 1",
"CONFIG_LEDS_S3C24XX_MODULE 1",
"CONFIG_RTC_INTF_PROC 1",
"CONFIG_PM_CLK 1",
"CONFIG_STACKTRACE_SUPPORT 1",
"CONFIG_USB_DEVICE_CLASS 1",
"CONFIG_LOCKD 1",</