如何找到 hi3516 在编译内核时使用哪个dts?


原文链接: 如何找到 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设备数的?

  1. 查看 makefile 的入口配置文件 .config

cp arch/arm/configs/hi3516dv300_smp_defconfig .config

  1. 在.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
  1. 那么找到 CONFIG_ARCH_HI3516DV300

arch/arm/boot/dts/Makefile

dtb-$(CONFIG_ARCH_HI3516DV300) += \
	hi3516dv300-demb.dtb


  1. 可以看出当配置了 ARCH_HI3516DV300 后
    arch/arm/boot/dts/hi3516dv300-demb.dts


`