006-BSP学习笔记-kernel移植

一、重要文件及目录

arch/arm/configs 不同平台配置文件
arch/arm/boot/dts 设备树配置
arch/arm/boot编译输出二进制目录
arch/arm/mach-xxx相应平台的驱动和初始化文件

二、内核移植

1、添加开发板默认配置文件

cd arch/arm/configs
cp imx_v7_mfg_defconfig imx6ull_my_emmc_defconfig

找到“CONFIG_ARCH_MULTI_V6=y”这一行,将其屏蔽掉

2、添加开发板对应的设备树文件

cd arch/arm/boot/dts
cp imx6ull-14x14-evk.dts imx6ull-my-emmc.dts

修改arch/arm/boot/dts/Makefileimx6ull-my-emmc.dtb添加进去

dtb-$(CONFIG_SOC_IMX6ULL) += \
	imx6ull-14x14-ddr3-arm2.dtb \
	imx6ull-14x14-ddr3-arm2-adc.dtb \
	...
	imx6ull-my-emmc.dtb

三、CPU主频和网络驱动修改

1、CPU主频修改

BogoMIPS粗略衡量CPU性能,值越高,性能越强

cat /proc/cpuinfo 

/sys/bus/cpu/devices/cpu0/cpufreq 目录下可查看频率及CPU工作模式

menuconfig下设置

CPU Power Management
-> CPU Frequency scaling
-> Default CPUFreq governor

2、自定义频率

修改arch/arm/boot/dts/imx6ull.dtsi

cpu0: cpu@0 {
			compatible = "arm,cortex-a7";
			device_type = "cpu";
			reg = <0>;
			clock-latency = <61036>; /* two CLK32 periods */
			operating-points = <
				/* kHz	uV */
				792000  1225000 //添加792Mhz支持
				528000	1175000
				396000	1025000
				198000	950000
			>;
			fsl,soc-operating-points = <
				/* KHz	uV */
				792000	1175000 //添加792Mhz支持
				528000	1175000
				396000	1175000
				198000	1175000
			>;
make dtbs

3、使能8线EMMC驱动(kernel默认为4线)

imx6ull-my-emmc.dts

&usdhc2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usdhc2>;
	non-removable;
	status = "okay";
};

改为

&usdhc2 {
	pinctrl-names = "default", "state_100mhz", "state_200mhz";
	pinctrl-0 = <&pinctrl_usdhc2>;
	pinctrl-1 = <&pinctrl_usdhc2_100mhz>;
	pinctrl-2 = <&pinctrl_usdhc2_200mhz>;
	bus-width = <8>;
	non-removable;
	status = "okay";
};

4、网络驱动修改(KSZ8081 换为了 SR8201F)

①修改复位及网络时钟引脚驱动

imx6ull-my-emmc.dts

//删除
pinctrl_spi4: spi4grp {
	fsl,pins = <
		MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10 0x70a1
		MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11 0x70a1
		MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x70a1 //删除作为SPI的配置
		MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x80000000 //删除
	>;
};

spi4 {
	compatible = "spi-gpio";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_spi4>;
	pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; //删除作为SPI的配置
	......
	cs-gpios = <&gpio5 7 0>;//删除作为SPI的配置

//修改
&iomuxc_snvs {
	pinctrl-names = "default_snvs";
	pinctrl-0 = <&pinctrl_hog_2>;
	imx6ul-evk {
	
		...... /*省略掉其他*/
		
		/*enet1 reset */
		pinctrl_enet1_reset: enet1resetgrp {
			fsl,pins = <
				/* used for enet1 reset */
				MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0
			>;
		};
		
		/*enet2 reset */
		pinctrl_enet2_reset: enet2resetgrp {
			fsl,pins = <
				/* used for enet2 reset */
				MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10B0
			>;
		};
	};
};

pinctrl_enet1: enet1grp {
	fsl,pins = <
		......
		MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031 //修改时钟
	>;
};

pinctrl_enet2: enet2grp {
	fsl,pins = <
		......
		MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b031 //修改
	>;
};

1 &fec1 {
2 	pinctrl-names = "default";
3 	pinctrl-0 = <&pinctrl_enet1
4 				&pinctrl_enet1_reset>;//修改
5 	phy-mode = "rmii";
	......
9 	status = "okay";
10 };
11
12 &fec2 {
13 	pinctrl-names = "default";
14 	pinctrl-0 = <&pinctrl_enet2
15 				&pinctrl_enet2_reset>;//修改
16 	phy-mode = "rmii";
	......
36 };
②修改网卡PHY地址
171 &fec1 {
172 pinctrl-names = "default";
173 pinctrl-0 = <&pinctrl_enet1
174 &pinctrl_enet1_reset>;
175 phy-mode = "rmii";
176 phy-handle = <&ethphy0>;
177 phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>;
178 phy-reset-duration = <200>;
179 status = "okay";
180 };
181
182 &fec2 {
183 pinctrl-names = "default";
184 pinctrl-0 = <&pinctrl_enet2
185 &pinctrl_enet2_reset>;
186 phy-mode = "rmii";
187 phy-handle = <&ethphy1>;
188 phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; //低电平有效
189 phy-reset-duration = <200>; //电平持续200ms
190 status = "okay";
191
192 mdio {
193 #address-cells = <1>;
194 #size-cells = <0>;
195
196 ethphy0: ethernet-phy@2 { //地址
197 compatible = "ethernet-phy-ieee802.3-c22";
198 smsc,disable-energy-detect; //芯片型号
199 reg = <2>; //地址
200 };
201
202 ethphy1: ethernet-phy@1 {
203 compatible = "ethernet-phy-ieee802.3-c22";
204 smsc,disable-energy-detect;
205 reg = <1>;
206 };
207 };
208 };
③修改fec_main.c文件

drivers/net/ethernet/freescale/fec_main.c fec_reset_phy

3330 static void fec_reset_phy(struct platform_device *pdev)
3331 {
...
3356 msleep(200); /* 复位结束后至少再延时 150ms 才能继续操作 SR8201F(芯片操作手册) */
3357 }
④修改内核配置文件

使能smsc驱动并使用SAVE另存imx_my_emmc_defconfig
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值