编译broadcom SDK

来源:互联网 发布:windows安装mac os x 编辑:程序博客网 时间:2024/05/18 06:25

以arm 为列来说明,如何编译broadcom SDK。

(1)     添加一个新的目录

mkdir –p $SDK/systems/linux/kernel/

<platform>代表你平台的名称,最好带上内核版本。例如:arm-2_6。

(2)     拷贝并修改Makefile

拷贝相应的Makefile文件到$SDK/systems/linux/kernel/<platform>

这里拷贝systems/linux/kernel/x86-generic-2_6/Makefile到$SDK/systems/linux/kernel/<platform>。把Makefile里面的platform=x86-generic-$(kernel_version)修改成platform=arm-$(kernel_version)。

(3)     添加$SDK/make/Makefile.linux-<platform>

在$SDK/make目录找一个相近的Makefile.linux-<platform>文件,最好是同一平台,在这里我用Makefile.linux-rsx-3_6作为我的Makefile.linux-<platform>。然后修改Makefile.linux-<platform>文件。主要是修改TOOLCHAIN_BASE_DIR、TARGET_ARCHITECTURE、KERNDIR,KFLAGS等等。具体修改如下。

51c51

< TOOLCHAIN_BASE_DIR:=/projects/ntsw-tools/linux/iproc_ldks/ldk36/iproc

---

> TOOLCHAIN_BASE_DIR:=/opt/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux

54c54

< TARGET_ARCHITECTURE:=arm-broadcom-linux-uclibcgnueabi

---

> TARGET_ARCHITECTURE:=arm-linux-gnueabihf

57c57

< KERNDIR:=$(TOOLCHAIN_BASE_DIR)/kernel/linux-custom

---

> KERNDIR:=/home/work/cubietrunk/kernel-source/

64,66c64,66

< TOOLCHAIN_BIN_DIR=$(TOOLCHAIN_BASE_DIR)/buildroot/usr/bin

< overridePATH:=$(TOOLCHAIN_BASE_DIR)/buildroot/usr/$(TARGET_ARCHITECTURE)/bin:$(TOOLCHAIN_BIN_DIR):$(PATH)

<LD_LIBRARY_PATH=$(TOOLCHAIN_BASE_DIR)/buildroot/usr/lib

---

> TOOLCHAIN_BIN_DIR=$(TOOLCHAIN_BASE_DIR)/bin

> overridePATH:=$(TOOLCHAIN_BASE_DIR)/$(TARGET_ARCHITECTURE)/bin:$(TOOLCHAIN_BIN_DIR):$(PATH)

>LD_LIBRARY_PATH=$(TOOLCHAIN_BASE_DIR)/lib

97c97

< KFLAG_INCLD =$(TOOLCHAIN_BASE_DIR)/buildroot/usr/lib/gcc/$(TARGET_ARCHITECTURE)/4.7.2/include

---

> KFLAG_INCLD =$(TOOLCHAIN_BASE_DIR)/lib/gcc/$(TARGET_ARCHITECTURE)/4.8.2/include

100c100

< KFLAGS := -D__LINUX_ARM_ARCH__=7-D__KERNEL__ -nostdinc  -isystem$(KFLAG_INCLD) -I$(LINUX_INCLUDE) -include $(LINUX_INCLUDE)/linux/version.h-include $(LINUX_INCLUDE)/generated/autoconf.h -I$(KERNDIR)/arch/arm/include-I$(KERNDIR)/arch/arm/include/generated-I$(KERNDIR)/arch/arm/mach-northstar/include-I$(KERNDIR)/arch/arm/plat-iproc/include -Wall -Wstrict-prototypes-Wno-trigraphs -Os -fno-strict-aliasing -fno-common -marm -mabi=aapcs-linux-fno-pic -pipe -msoft-float -ffreestanding -march=armv7-a -mfpu=vfp-mfloat-abi=softfp -fomit-frame-pointer -g -fno-stack-protector-Wdeclaration-after-statement -Wno-pointer-sign -mlong-calls

---

> KFLAGS := -D__LINUX_ARM_ARCH__=7-D__KERNEL__ -nostdinc  -isystem$(KFLAG_INCLD) -I$(LINUX_INCLUDE) -include $(LINUX_INCLUDE)/linux/version.h-include $(LINUX_INCLUDE)/generated/autoconf.h -I$(KERNDIR)/arch/arm/include-I$(KERNDIR)/arch/arm/include/generated-I$(KERNDIR)/arch/arm/mach-sun7i/include-I$(KERNDIR)/arch/arm/plat-sunxi/include -Wall -Wstrict-prototypes-Wno-trigraphs -Os -fno-strict-aliasing -fno-common -marm -mabi=aapcs-linux-fno-pic -pipe -msoft-float -ffreestanding -march=armv7-a -mfpu=vfp-mfloat-abi=softfp -fomit-frame-pointer -g -fno-stack-protector-Wdeclaration-after-statement -Wno-pointer-sign -mlong-calls

104c104

< include${SDK}/make/Makefile.linux-kernel-3_6

---

> include${SDK}/make/Makefile.linux-kernel-2_6

这里之所以用Makefile.linux-kernel-2_6,是因为目前的broadcom SDK只分2.4版本和2.6版本,没有支持3.x版本,它这里的版本没有要求和内核版本严格对上。2.4版本编译的模块文件是.o,2.6版本编译的模块文件是.ko文件。内核是3.x版本的就直接用2.6版本即可。

注意,修改一下${SDK}/make/Makefile.linux-kernel-2_6,把BCM_CFLAGS   = -Wall -Werror修改成BCM_CFLAGS   = -Wall,即去掉-Werror,不然编译不过。

(4)     编译内核模块

cd $SDK/systems/linux/kernel/<platform>

gmake

(5)     编译过程中的错误

$SDK /systems/linux/kernel/user/shared/bcm-uk-rtrans.c

$SDK /systems/linux/kernel/user/shared/bcm-uk-trans.c

会报argument to‘sizeof’ in ‘memset’ call is the same expression as the destination; did youmean to provide an explicit length? [-Werror=sizeof-pointer-memaccess]的错误,把

memset(data, 0, sizeof(data));改成相应的memset(data, 0, sizeof(*data));。

类似的错误都可以这样修改。

其中,$SDK代表你自己的SDK目录,注意要修改自己的内核头文件和交叉编译器工具链的路径。

编译成功后,在$SDK/systems/linux/kernel/<platform>目录下,会有linux-kernel-bde.ko、liunux-bcm-core.ko、linux-bcm-uk-proxy.ko、linux-bcm-diag.ko、linux-bcm-net.ko 、linux-bcm-diag-full.ko,bcm.user.proxy等文件。

(6)     裁剪SDK

liunux-bcm-core.ko文件很大,有40M左右,因为默认情况下支持所有的Strata switch andfabric chips和phy,可以通过配置${SDK}/make/Make.local来裁剪一下,只支持你所用的芯片和phy。

首先需要cp ${SDK}/make/Make.local.template${SDK}/make/Make.local,然后修改Make.local。定义chip的变量:BCM_PTL_SPT=1,BCM_5389_A0 = 1(对应的芯片,这里只是举例)打开。定义phy的变量是BCM_PHY_LIST, BCM_PHY_LIST=5482(举例)。

还有FEATURE_LIST, NO_SAL_APPL等等,都可以裁减。具体的功能可以见/Make.local里面的注释,不过,需要注意的是,有些变量有依赖关系的,不是随意可以去掉了。如果在编译过程有问题,可以看源代码,推断出相应的关系。

在Makefile里可以把相关变量打印出来。举例:在Make.config里定义BCM_PHY_LIST的后面添加着两句。

$(warning BCM_PHY_LIST is $(BCM_PHY_LIST))

$(warning CFGFLAGS is $(CFGFLAGS))

(7)     重新编译

cd $SDK/systems/linux/kernel/<platform>

先make clean一下,再 gmake。


0 0