環境
宿主機:ubuntu 16.04
交叉編譯:gcc-linaro-4.9-2014.11
ubuntu自帶源 eclipse 安裝(想使用新版直接跳過)
安裝eclipse
sudo apt-get install eclipse-platform
安裝C/C++開發插件
sudo apt-get install eclipse-cdt
在命令行輸入 eclipse 即可啟動
第一次啟動會要求設置默認工作區,選擇一個workspace 目錄即可,后面的工程均可放在里面。
eclipse-cpp-2019-06-R-linux-gtk-x86_64 使用
1.eclipse新版C/C++開發包下載
2.eclipse運行環境 jre 下載,當然也可以使用 jdk, ubuntu也自帶了 openjdk
jre下載地址:https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
我下載的 jre-8u221-linux-x64.tar.gz
解壓安裝
tar -xzvf eclipse-cpp-2019-06-R-linux-gtk-x86_64.tar.gz tar -xzvf jre-8u221-linux-x64.tar.gz
到解壓目錄執行 ./eclipse
新版eclipse太占內存了,剛開始啟動1G內存提示不夠用,需要設置進行內存優化
還是使用老版,接下來的設置均采用老版。
eclipse工程示例及設置
1.新建工程
file->new->C project
填寫工程名稱,會自動生成工程目錄;選擇交叉編譯 Cross GCC
設置交叉編譯器
2. eclipse常用設置
右擊工程,選擇 properties-> C/C++ Build
建議使用自己的Makefile使工程更加靈活性,去掉自動生成makefile,若使用eclipse自動編譯則另外應詳細設置 Setting 項
3. 交叉編譯調試gdb設置
4. Linux內核開發eclipse環境配置
當開發內核模塊、內核驅動、內核修改時均需要配置為對應內核版本
當eclipse導入 相關配置宏定義、頭文件路徑時,便於源碼的檢錯和查看。
配置步驟:
1.導出eclipse的 Paths and Symbols配置xml模板
工程上右鍵properties---->C/C++ General--->Paths and Symbols
右下角選擇Export Settings ,自定義xml文件路徑名稱,一般放在工程目錄下即可
我導出到 ~/workspace/wh_fsu/symbol.xml
2. 生成內核配置xml文件
內核配置文件為 .config,最好使用其編譯時生成的 autoconf.h 文件來轉化為 xml 文件;
注意 autoconf.h 在 make 時才會生成,位置在 linux-4.1.15/include/generated/autoconf.h
轉化命令
cat autoconf.h |grep define |awk '{print "<macro><name>" $2 "</name><value>" $3 "</value></macro>"}' > symbol.xml
修改工程的xml文件
1)添加頭文件目錄
常用的有:
linux-4.1.15/include
linux-4.1.15/arch/arm/include
linux-4.1.15/arch/arm/mach-mxs
添加到第一個<language name="C Source File">和 </language>之間
<language name="C Source File"> <includepath>/home/wangh/Tools/linux-4.1.15/include</includepath> <includepath>/home/wangh/Tools/linux-4.1.15/arch/arm/include</includepath> <includepath>/home/wangh/Tools/linux-4.1.15/arch/arm/mach-mxs</includepath> </language>
2)然后將autoconf.h轉化的xml文件里面的內容 全部拷貝到 第二個<language name="C Source File">和 </language>之間
同時添加一行
<macro><name>__KERNEL__</name><value>1</value></macro>
修改好后,import Settings 效果如下
添加自己的內核模塊 Makefile 示例
其中內核目錄 KERNEL_4115_PATH 我定義在環境變量中了
ifneq ($(KERNELRELEASE),) obj-m := wh_gpio.o else PWD := $(shell pwd) KDIR:=$(KERNEL_4115_PATH) all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions *~ *.order *.symvers endif