您的位置:首页 > 理论基础 > 计算机网络

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

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


1.uboot环境变量设置:

    TQE9>> setenvconsole ttymxc0

 
  TQE9>> setenv ipaddr 192.168.253.50

 
  TQE9>> setenv serverip 192.168.253.101

 
  TQE9>> setenv ethaddr 00:01:02:03:04:05

 
  TQE9>> setenv bootfile zImage

 
  TQE9>> setenv fdt_file imx6q-tqe9.dtb

 
  TQE9>> setenv loadaddr 0x12000000

         TQE9>>
setenv fdt_addr 0x18000000

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_REALTEK、CONFIG_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上要做的事情不多,总的来说也就是配置dts和make
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.dts arch/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

官方sabresd的yocto采用的就是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/

取消掉ATH6KL_SDIO、BCMDHD_SDIO、BCMDHD、BRCMFMAC的驱动选择。


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芯片的共性问题,由于手上只有一块板子无从验证。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kernel 调试 网络 bsp 移植