如何找到 hi3516 在编译内核时使用哪个dts?
#
Hi3516dv300 编译uboot --> u-boot-z.bin
make clean
make ARCH=arm CROSS_COMPILE=arm-himix200-linux-
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- u-boot-z.bin
Hi3516dv300 编译内核kernel --> 生成 uImage
方式1: 修改 Makefile 225行
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
修改为==>
ARCH ?= arm
CROSS_COMPILE ?= arm-himix200-linux-
cp hi3516dv300_smp_defconfig .config
make clean
make uImage
cp arch/arm/boot/uImage ./uImage
方式2:
cp arch/arm/configs/hi3516dv300_smp_defconfig .config
(如果是 emmc启动时执行如下操作:cp arch/arm/configs/hi3516dv300_emmc_smp_defconfig .config)
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- uImage
注意修改完后要保存defconfig
b. 一些通用的内容defconfig并不会保存,怎样剔出掉这些在.config通用的内容?
make savedefconfig - Save current config as ./defconfig (minimal config
内核中提供了make savedefconfig这个命令。这样做的优点相当多了就,节省空间以至于Linux内核的代码量不会太大,第二对比差异的时候好对比一些。更重要的是这个是一个正统的方式。
make savedefconfig && mv ./defconfig arch/arm/configs/xxx_defconfig
如何减小kernel文件 uImage 的体积?
修改压缩格式 GZIP ==> LZMA
vi .config
# CONFIG_KERNEL_GZIP is not set
CONFIG_KERNEL_LZMA=y
kernel 增加 wifi 支持
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_PRIV=y
vi net/wireless/Kconfig
config WIRELESS_EXT
bool >> 更改为 bool "wireless_ext" 打开 menuconfig 配置项
1、修改 net/wireless/Kconfig 源码 打开CONFIG_WIRELESS_EXT=y
2、使用kernel-2.6.x版本无需以下设置,针对kernel-3.2.x版本需要修改源码目录source/net/wireless/下的Kconfig文件,修改第一项为
config WIRELESS_EXT
bool "Wireless extension" // 增加menuconfig 配置选项
default y
3、注意如下:
Networking support--->Wireless--->Wireless extension--->y
Networking support--->Wireless--->cfg80211 - wireless configuration API--->y
Networking support--->Wireless--->cfg80211 - wireless extension sysfs files--->y
Device Drivers--->Network device support--->Wireless LAN--->Realtek RTL8192cu/RTL8188CU USB Wireless Network Adater--->y
Device Drivers--->Network deivce support--->Wireless LAN--->USB ZD1201 based Wireless device support--->y
4、make ARCH=arm CROSS_COMPILE=arm-linux- zImage
复制代码
三、编译wifi驱动
1、进入目录Makefile修改硬件和交叉编译器
CONFIG_RTL8188E=y
CONFIG_PLATFORM_ARM_S3C2K4=y
可以通过vi .config确认是否配置OK
ifeq ($(CONFIG_PLATFORM_ARM_S3C2K4), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
CROSS_COMPILE := arm-linux-
KVER :=
KSRC := /home/develop/helper2416/kernel2416/
endif
2、修改一处bug
cd core/rtw_recv.c
Line 3469
sub_skb->tail = (sk_buff_data_t)((SIZE_PTR)sub_skb->data + nSubframe_Length);
改为
sub_skb->tail = (u8 *)((SIZE_PTR)sub_skb->data + nSubframe_Length);
3、进入目录Makefile修改模块名称
Line 180
MODULE_NAME = 8188eu
改为
MODULE_NAME = rtl8188eu
通过验证此处不可修改,编译有名称依赖
复制代码
四、安装驱动
1、把编译好的8188eu.ko文件拷贝到目标板/lib/modules下面对应的目录中
执行如下命令,注意前面两条命令可不执行
depmod -a
modprobe 8188eu.ko
insmod 8188eu.ko
2、重启板子等待板子启动,从启动信息中可以看到wifi驱动8188eu.ko已经被安装(注意自己添加安装启动项或者添加驱动安装启动等)
3、在板子的命令行中使用iwconfig来查看wireless设备
4、启动wlan0设备,命令为ifconfig wlan0 up
5、使用iwlist wlanX sc扫描周围的AP
6、注意此时只能连接WPE加密的路由器,建议大家使用没有密码的路由来测试。
复制代码
因为iwconfig、iwlist等命令比较简单,不支持WPA加密机制,所以才有后面的wpasupplicant篇,大家可以先了解一下这个工具,很不错的,里面还有qt界面的图形化配置工具源码,可以编译到helper2416上面哦,类似手机搜索ap然后连接的那种界面。
Hi3516dv300 是如何决定使用哪个dts设备数的?
- 查看 makefile 的入口配置文件 .config
cp arch/arm/configs/hi3516dv300_smp_defconfig .config
- 在.config 文件中通过 CONFIG_ARCH_HI3516DV300=y 决定使用哪种板子
arch/arm/configs/hi3516dv300_smp_defconfig
# Hisilicon BVT platform type
#
# CONFIG_ARCH_HI3516A is not set
# CONFIG_ARCH_HI3516CV500 is not set
CONFIG_ARCH_HI3516DV300=y
# CONFIG_ARCH_HI3556V200 is not set
# CONFIG_ARCH_HI3559V200 is not set
# CONFIG_ARCH_HI3536DV100 is not set
# CONFIG_ARCH_HI3521A is not set
# CONFIG_ARCH_HI3531A is not set
# CONFIG_ARCH_HI3556AV100 is not set
# CONFIG_ARCH_HI3519AV100 is not set
# CONFIG_ARCH_HISI_BVT_AMP is not set
- 那么找到 CONFIG_ARCH_HI3516DV300
arch/arm/boot/dts/Makefile
dtb-$(CONFIG_ARCH_HI3516DV300) += \
hi3516dv300-demb.dtb
可以看出当配置了 ARCH_HI3516DV300 后arch/arm/boot/dts/hi3516dv300-demb.dts