天嵌TQ_E9卡片电脑移植飞思卡尔yocto L4.1.15_1.0.0_ga 第四篇 新版kernel(L4.1.15-r)移植

来源:互联网 发布:软件测试第二版中文版 编辑:程序博客网 时间:2024/06/05 20:27

现在2015.04uboot已经真正可以为我们的E9服务了,接下来就是移植内核,其实自3.x以后的新版内核移植起来已经相当省心省力了,主要就是修改dts文件,方便起见,我们还是先把tftpnfspc端和板子都配好,方便我们使用网络启动调试。

1.uboot环境变量设置:

TQE9>> setenv mynetargs setenv bootargs console=${console},${baudrate} ${smp} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp

TQE9>> setenv bootcmd_net run mynetargs;tftpboot ${loadaddr} ${bootfile};tftpboot ${fdt_addr} ${fdt_file};bootz ${loadaddr} - ${fdt_addr};

TQE9>> setenv bootcmd run bootcmd_net

TQE9>>saveenv

 

2.pc(ubuntu)上安装设置tftp服务:

1. 安装

$ sudo apt-get install tftp-hpa tftpd-hpa

 

2. 建立目录

$ mkdir /opt/tftpboot

$ sudo chmod 0777 /opt/tftpboot

$ echo this is a test tftp file > /opt/tftpboot/test.txt

$ echo this is another test tftp file > ./test1.txt

 

 

3. 配置

$ sudo vi /etc/default/tftpd-hpa

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/opt/tftpboot"

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="-l -c -s" # 这里是选项,-c是可以上传文件的参数,-s是指定tftpd-hpa服务目录,上面已经指定

 

4. 重启服务

$ sudo service tftpd-hpa restart

 

5. 测试

$ tftp 127.0.0.1

tftp>get test.txt

tftp>put test1.txt

tftp>q

 

miiphy_init():初始化mii_devs链表,该列表中是一系列象征mac控制器,每个miid_dev表示一条mdio总线,可挂载多个phy设备。

phy_init():根据宏定义(例如CONFIG_PHY_REALTEKCONFIG_PHY_ATHEROS)初始化相应一个或多个系列网卡,其中就有我们项目中使用的realtek(RTL8211E)系列网卡以及sabresd公版所使用的aheros(AR8031)系列网卡。

phy_env_init():初始化关于phy的一些uboot环境变量,这里我们不需要关心。

board_eth_init():网卡的板级初始化。

3.pc(ubuntu)上安装设置nfs服务:

1. 安装

sudo apt-get install nfs-kernel-server

mkdir /opt/nfsroot 

2.配置nfs;

sudo vi /etc/exports

在文文件的最后一行添加:

/opt/nfsroot *(rw,sync,no_root_squash,no_subtree_check)
3.重启服务

sudo service nfs-kernel-server restart

4.挂载测试指令:
sudo mount -t nfs 127.0.0.1:/opt/nfsroot /   ./mydir

 

 

4.准备kernel:

Kernel上要做的事情不多,总的来说也就是配置dtsmake menuconfig配置内核。

1.准备kernel

$ cd /opt/fsl-yocto-L4.1.15_1.0.0-ga/fsl-release-bsp/

source fsl-setup-release.sh -b build-x11

$ bitbake core-image-minimal

$cp tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/4.1.15-r0/Git/*  /opt/fsl-yocto-L4.1.15_1.0.0-ga/limux-4.1.14-e0/ -rfd

$cd /opt/fsl-yocto-L4.1.15_1.0.0-ga/limux-4.1.14-e0/

$cp  arch/arm/boot/dts/imx6q-sabresd.dtsarch/arm/boot/dts/imx6q-tqe9.dts

$cp  arch/arm/boot/dts/imx6qdl-sabresd.dtsi    arch/arm/boot/dts/imx6qdl-tqe9.dtsi

$vim arch/arm/boot/dts/imx6q-tqe9.dts

#include imx6qdl-sabresd.dtsi

改成

#include imx6qdl-tqe9.dtsi

2.修改imx6q-tqe9.dts以适应板子上的串口终端管脚:

pinctrl_uart1节点改成如下:

pinctrl_uart1:uart1grp {

fsl,pins = <

MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA0x1b0b1

MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA0x1b0b1

>;

};

pinctrl_usdhc3节点改成如下:

pinctrl_usdhc3: usdhc3grp {

fsl,pins = <

MX6QDL_PAD_SD3_CMD__SD3_CMD0x17059

MX6QDL_PAD_SD3_CLK__SD3_CLK0x17059

MX6QDL_PAD_SD3_DAT0__SD3_DAT00x17059

MX6QDL_PAD_SD3_DAT1__SD3_DAT10x17059

MX6QDL_PAD_SD3_DAT2__SD3_DAT20x17059

MX6QDL_PAD_SD3_DAT3__SD3_DAT30x17059

#if 0

MX6QDL_PAD_SD3_DAT4__SD3_DAT40x17059

MX6QDL_PAD_SD3_DAT5__SD3_DAT50x17059

MX6QDL_PAD_SD3_DAT6__SD3_DAT60x17059

MX6QDL_PAD_SD3_DAT7__SD3_DAT70x17059

#endif

>

};

pmic节点添加status = disabled”属性(E9没有pfuze100芯片)

pmic:pfuze100@08 {

compatible = fsl,pfuze100;

reg = <0x08>

status = disabled;

...

}

3.配置内核

$ make distclean

官方sabresdyocto采用的就是KERNEL-DIR/arch/arm/configs/imx_v7_defconfig,这里我们也使用这个配置方案。

$ make imx_v7_defconfig

配置交叉编译工具链

$ make menuconfig

Gerneral setup --->

Cross-compile tool prefix

(/opt/fsl-imx-x11/4.1.15-1.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-)

配置RTL8211E网卡驱动

Device Drivers --->

Network device support --->

PHY Device support and infrastructure --->

<*>Drivers for Realtek PHYs

$ make

$ cp arch/arm/boot/zImage arch/arm/boot/dts/imx6q-tqe9.dtb /opt/tftpboot/

5.准备nfs文件系统

ycoto中编出来的文件系统直接解压到/opt/nfsroot/

$ cp /opt/fsl-yocto-L4.1.15_1.0.0-ga/fsl-release-bsp/build-x11/tmp/deploy/images/imx6qsabresd/fsl-image-qt5-imx6qsabresd-20160428090146.rootfs.tar.bz2 /opt/nfsroot/
$ cd  
/opt/nfsroot/
$ tar jxvf 
 fsl-image-qt5-imx6qsabresd-20160428090146.rootfs.tar.bz2
$ rm 
fsl-image-qt5-imx6qsabresd-20160428090146.rootfs.tar.bz2 
 

 

6.板子pc连同一局域网,上电启动板子。

现在板子应该已经可以进入linux系统了, mmc就不烧了。
    注意:
    如果启动期间串口终端出现如下错误:

fec 2188000.ethernet eth0: no PHY, assuming direct connection to switch

libphy: PHY fixed-0:00 not found

fec 2188000.ethernet eth0: could not attach to PHY

IP-Config: Failed to open eth0

IP-Config: No network devices available 

    则在kernel源码目录进行如下操作:
    $ vi drivers/net/phy/phy_device.c +296    作如下修改:
    
 
     292 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,

 293                       bool is_c45, struct phy_c45_device_ids *c45_ids)

 294 {

 295         int phy_reg;

 296         msleep(1);  

 297         if (is_c45)

 298                 return get_phy_c45_ids(bus, addr, phy_id, c45_ids);

 299 

 300         /* Grab the bits from PHYIR1, and put them in the upper half */

 301         phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);

 302         if (phy_reg < 0)

 303                 return -EIO;

    重新编译内核并把镜像拷到/opt/tftpboot/下即可,原因是有可能phy芯片的mdio操作过快致使读不出来phy_id从而不能识别phy,这种情况可能是我的板子idea个性问题也可能是该RTL8211E芯片的共性问题,由于手上只有一块板子无从验证。 

0 0