imx6q 筆記 環境:Ubuntu 17.10
一、安裝編譯工具(二選一):
下載地址:http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/arm-linux-gnueabihf/
1、下載編譯工具:gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2;下載地址:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
2、命令安裝交叉工具鏈: sudo apt-get install gcc-arm-linux-gnueabi
二、交叉編譯sfdisk
1、下載:https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.23/util-linux-2.23.1.tar.bz2
2、解壓:tar -xjf util-linux-2.23.1.tar.bz2
3、配置:./configure --host=arm-linux CC=arm-linux-gnueabi-gcc --prefix=/home/lonnox/work/tools/util-linux-2.23.1/_install --without-ncurses
4、編譯:make&&make install
三、搭建網絡文件系統
1、tar zxvf rootfs.tgz
2、sudo apt-get install nfs-kernel-server portmap
3、sudo vim /etc/exports
添加:/home/lonnox/work/imx6/nfs_root *(rw,sync,no_root_squash)
4、sudo /etc/init.d/nfs-kernel-server restart
5、測試nfs是否成功:sudo mount -t nfs 127.0.0.1:/home/lonnox/work/imx6/nfs_root /mnt
如果出錯 svc: failed to register lockdv1 RPC service (errno 111).
添加-o nolock,命令改成:mount -o nolock -t nfs 192.168.1.104:/home/lonnox/work/imx6/nfs_root /mnt
6.網絡文件系統的方式啓動
setenv bootargs console=ttySAC0,115200 ${displayArgs} root=/dev/nfs rw nfsroot=192.168.1.104:/home/lonnox/work/imx6/nfs_root,v3,tcp ip=192.168.1.106:192.168.1.104:192.168.1.1:255.255.255.0
mmc dev 3;mmc read ${loadaddr} 0x800 0x3000;setenv bootargs ${bootargs};bootm
四、交叉編譯mkfs.ext3
1、下載:https://netix.dl.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.44.3/e2fsprogs-1.44.3.tar.gz
2、解壓 tar -xzf e2fsprogs-1.44.3.tar.gz
3、./configure --host=arm-linux CC=arm-linux-gnueabi-gcc --prefix=/home/lonnox/work/tools/e2fsprogs-1.44.3/_install
//=============================================================
///vim tmp_build.sh
#! /bin/sh
CC=arm-linux-gnueabi-gcc ./configure --enable-elf-shlibs --host=arm --prefix=/home/lonnox/work/tools/e2fsprogs-1.44.3/_install
//=============================================================
4、編譯:make&&make install
5.拷貝
cp -a bin/* ../../../imx6/nfs_root/usr/bin/
cp -a sbin/* ../../../imx6/nfs_root/usr/sbin/
cp -a lib/* ../../../../imx6/nfs_root/lib/
6、查看分區信息cat /proc/partitions
五、編譯uboot
1、下載uboot:git clone https://source.codeaurora.org/external/imx/uboot-imx -b u-boot/master
2、修改board/freescale/mx6qarm2/imximage.cfg
/* DCD */
DATA 4, 0x020e0798, 0x000C0000
DATA 4, 0x020e0758, 0x00000000
DATA 4, 0x020e0588, 0x00000030
DATA 4, 0x020e0594, 0x00000030
DATA 4, 0x020e056c, 0x00000030
DATA 4, 0x020e0578, 0x00000030
DATA 4, 0x020e074c, 0x00000030
DATA 4, 0x020e057c, 0x00000030
DATA 4, 0x020e058c, 0x00000000
DATA 4, 0x020e059c, 0x00000030
DATA 4, 0x020e05a0, 0x00000030
DATA 4, 0x020e078c, 0x00000030
DATA 4, 0x020e0750, 0x00020000
DATA 4, 0x020e05a8, 0x00000018
DATA 4, 0x020e05b0, 0x00000018
DATA 4, 0x020e0524, 0x00000018
DATA 4, 0x020e051c, 0x00000018
DATA 4, 0x020e0518, 0x00000018
DATA 4, 0x020e050c, 0x00000018
DATA 4, 0x020e05b8, 0x00000018
DATA 4, 0x020e05c0, 0x00000018
DATA 4, 0x020e0774, 0x00020000
DATA 4, 0x020e0784, 0x00000018
DATA 4, 0x020e0788, 0x00000018
DATA 4, 0x020e0794, 0x00000018
DATA 4, 0x020e079c, 0x00000018
DATA 4, 0x020e07a0, 0x00000018
DATA 4, 0x020e07a4, 0x00000018
DATA 4, 0x020e07a8, 0x00000018
DATA 4, 0x020e0748, 0x00000018
DATA 4, 0x020e05ac, 0x00000018
DATA 4, 0x020e05b4, 0x00000018
DATA 4, 0x020e0528, 0x00000018
DATA 4, 0x020e0520, 0x00000018
DATA 4, 0x020e0514, 0x00000018
DATA 4, 0x020e0510, 0x00000018
DATA 4, 0x020e05bc, 0x00000018
DATA 4, 0x020e05c4, 0x00000018
DATA 4, 0x021b0800, 0xa1390003
DATA 4, 0x021b080c, 0x001F001F
DATA 4, 0x021b0810, 0x001F001F
DATA 4, 0x021b480c, 0x001F001F
DATA 4, 0x021b4810, 0x001F001F
DATA 4, 0x021b083c, 0x43180330
DATA 4, 0x021b0840, 0x03180310
DATA 4, 0x021b483c, 0x43200330
DATA 4, 0x021b4840, 0x0320025C
DATA 4, 0x021b0848, 0x40363838
DATA 4, 0x021b4848, 0x38362E3C
DATA 4, 0x021b0850, 0x3E3C4840
DATA 4, 0x021b4850, 0x44364640
DATA 4, 0x021b081c, 0x33333333
DATA 4, 0x021b0820, 0x33333333
DATA 4, 0x021b0824, 0x33333333
DATA 4, 0x021b0828, 0x33333333
DATA 4, 0x021b481c, 0x33333333
DATA 4, 0x021b4820, 0x33333333
DATA 4, 0x021b4824, 0x33333333
DATA 4, 0x021b4828, 0x33333333
DATA 4, 0x021b08b8, 0x00000800
DATA 4, 0x021b48b8, 0x00000800
DATA 4, 0x021b0004, 0x00020036
DATA 4, 0x021b0008, 0x09444040
DATA 4, 0x021b000c, 0x8A8F7955
DATA 4, 0x021b0010, 0xFF328F64
DATA 4, 0x021b0014, 0x01FF00DB
DATA 4, 0x021b0018, 0x00001740
DATA 4, 0x021b001c, 0x00008000
DATA 4, 0x021b002c, 0x000026D2
DATA 4, 0x021b0030, 0x008F1023
DATA 4, 0x021b0040, 0x00000047
DATA 4, 0x021b0000, 0x841A0000
DATA 4, 0x021b001c, 0x04088032
DATA 4, 0x021b001c, 0x00008033
DATA 4, 0x021b001c, 0x00048031
DATA 4, 0x021b001c, 0x09408030
DATA 4, 0x021b001c, 0x04008040
DATA 4, 0x021b0020, 0x00005800
DATA 4, 0x021b0818, 0x00011117
DATA 4, 0x021b4818, 0x00011117
DATA 4, 0x021b0004, 0x00025576
DATA 4, 0x021b0404, 0x00011006
DATA 4, 0x021b001c, 0x00000000
/* set the default clock gate to save power */
DATA 4 0x020c4068 0x00C03F3F
DATA 4 0x020c406c 0x0030FC03
DATA 4 0x020c4070 0x0FFFC000
DATA 4 0x020c4074 0x3FF00000
DATA 4 0x020c4078 0x00FFF300
DATA 4 0x020c407c 0x0F0000C3
DATA 4 0x020c4080 0x000003FF
/* enable AXI cache for VDOA/VPU/IPU */
DATA 4 0x020e0010 0xF00000CF
/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
DATA 4 0x020e0018 0x007F007F
DATA 4 0x020e001c 0x007F007F
3、修改board/freescale/mx6qarm2/mx6qarm2.c
//modify:添加uart1的引腳出事化
static void setup_iomux_uart(void)
{
imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
}
iomux_v3_cfg_t const uart1_pads[] =
{
MX6_PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
MX6_PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),
};
iomux_v3_cfg_t const usdhc3_pads[] =
{
MX6_PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
//MX6_PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),//modify:uart1引腳衝突,註釋掉該語句
//MX6_PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),//modify:uart1引腳衝突,註釋掉該語句
MX6_PAD_NANDF_CS0__GPIO6_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
};
網絡部分修改:
//modify:添加
vim include/configs/mx6qarm2.h
#define CONFIG_NET_RANDOM_ETHADDR
#define CONFIG_LIB_RAND
//modify:修改引腳
vim mx6qarm2.c
iomux_v3_cfg_t const enet_pads[] = {
MX6_PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET_RXD1__GPIO1_IO26 | MUX_PAD_CTRL(NO_PAD_CTRL),
MX6_PAD_ENET_CRS_DV__GPIO1_IO25 | MUX_PAD_CTRL(NO_PAD_CTRL),
MX6_PAD_RGMII_TXC__RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_TD0__RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_TD1__RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_TD2__RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_TD3__RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_TX_CTL__RGMII_TX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_RXC__RGMII_RXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_RD0__RGMII_RD0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_RD1__RGMII_RD1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_RD2__RGMII_RD2 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_RD3__RGMII_RD3 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET_REF_CLK__ENET_TX_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL),
};
//modify:添加初始化
int board_early_init_f(void)
{
volatile unsigned int i = 0x88888;
setup_iomux_uart();
setup_iomux_enet();
//reset_ar8035();
/* Reset AR8031 PHY */
gpio_direction_output(IMX_GPIO_NR(1, 25) , 0);
while(i--);//mdelay(10);
gpio_set_value(IMX_GPIO_NR(1, 25), 1);
//udelay(100);
return 0;
}
SD卡部分修改:
SD卡掛載在ESDHC2上
int board_mmc_init(bd_t *bis)
{
int ret;
u32 index = 0;
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);//modify:修改爲MXC_ESDHC2_CLK
usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) {
switch (index) {
case 0:
imx_iomux_v3_setup_multiple_pads(
usdhc2_pads, ARRAY_SIZE(usdhc2_pads));//modify:修改爲 usdhc2_pads
break;
case 1:
imx_iomux_v3_setup_multiple_pads(
usdhc4_pads, ARRAY_SIZE(usdhc4_pads));
break;
default:
printf("Warning: you configured more USDHC controllers"
"(%d) then supported by the board (%d)\n",
index + 1, CONFIG_SYS_FSL_USDHC_NUM);
return -EINVAL;
}
ret = fsl_esdhc_initialize(bis, &usdhc_cfg[index]);
if (ret)
return ret;
}
return 0;
}
//modify:添加 usdhc2_pads
iomux_v3_cfg_t const usdhc2_pads[] = {
MX6_PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_GPIO_4__GPIO1_IO04 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
};
//eMMC
iomux_v3_cfg_t const usdhc4_pads[] = {
MX6_PAD_SD4_CLK__SD4_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD4_CMD__SD4_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD4_DAT0__SD4_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD4_DAT1__SD4_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD4_DAT2__SD4_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD4_DAT3__SD4_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD4_DAT4__SD4_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD4_DAT5__SD4_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD4_DAT6__SD4_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD4_DAT7__SD4_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
};
struct fsl_esdhc_cfg usdhc_cfg[2] = {
{USDHC2_BASE_ADDR},//modify:修改 USDHC2_BASE_ADDR
{USDHC4_BASE_ADDR},
};
int board_mmc_getcd(struct mmc *mmc)
{
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
int ret;
if (cfg->esdhc_base == USDHC2_BASE_ADDR) {//modify:修改 USDHC2_BASE_ADDR
gpio_direction_input(IMX_GPIO_NR(1, 4));//modify:修改片選 IMX_GPIO_NR(1, 4)
ret = !gpio_get_value(IMX_GPIO_NR(1, 4));//modify:修改片選 IMX_GPIO_NR(1, 4)
} else if (cfg->esdhc_base == USDHC4_BASE_ADDR){
ret = 1;/* eMMC is always present */
}
else{
ret = -1;/* Don't have the CD GPIO pin on board */
}
return ret;
}
/* 此處不用修改
int board_mmc_get_env_dev(int devno)
{
return devno - 1;
}
*/
4.修改 include/configs/mx6qarm2.h
#define CONFIG_MXC_UART_BASE UART1_BASE
5、編譯
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf- //arm-none-eabi-
make mx6qarm2_defconfig
make -j8
六、在uboot中查看uboot在emmc中的燒錄位置和數據
1、切換到當前板子使用的boot分區 mmc bootpart
2、切換到boot分區:mmc dev 3 1
3、也可以通過命令設置啓動分區到第一分區或其他分區:mmc dev 3 1
4、讀取boot分區第三個block(uboot燒錄是從第三個block開始)的數據到0x10800000中:mmc read 0x10800000 0x2 0x01
5、查看0x10800000內容,對比可知就是u-boot.bin的數據:md.b 0x10800000
七、在uboot中查看uImage在emmc中的燒錄位置和數據
1、切換到0分區:mmc dev 3 0
2、讀取0分區第2048個block(uImage燒錄是從1M位置開始燒錄)的數據到0x10800000中:mmc read 0x10800000 0x800 0x01
3、查看0x10800000內容,對比可知就是uImage的數據:md.b 0x10800000
八、在linux中查看uImage在emmc中的燒錄位置和數據
1、mmcblk0p1:文件系統存放分區。
2、從emmc讀入uImage的數據:dd if=/dev/mmcblk0 of=456 bs=1M skip=1 count=2
通過hexdump 456 -n 100可以知道和燒錄的uImage數據一致。
3、從emmc讀入u-boot.bin的數據: dd if=/dev/mmcblk0boot0 of=456 bs=512 skip=2 count=4
通過hexdump 456 -n 100可以知道和燒錄的u-boot.bin數據一致。
linux中EMMC寫入使能:echo 0 > /sys/block/mmcblk0boot0/force_ro
echo 0 > /sys/block/mmcblk0boot1/force_ro
echo 0 > /sys/block/mmcblk0/force_ro
//沒有該分區echo 0 > /sys/block/mmcblk0p1/force_ro
linux中EMMC只讀使能:echo 1 > /sys/block/mmcblk0boot0/force_ro
linux清除指令: dd if=/dev/zero of=/dev/mmcblk0p1 bs=1M count=1
dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=2
skip=xxx是在備份時對if 後面的部分也就是原文件跳過多少塊再開始備份;
seek=xxx則是在備份時對of 後面的部分也就是目標文件跳過多少塊再開始寫。
九、uboot中通過指令燒錄uboot
1、下載文件到內存:tftp 0x10800000 u-boot.imx
2、切換到uboot分區:mmc dev 3 1
3、燒錄,根據u-boot.imx的大小確定塊數:mmc write 0x10800000 2 2B6
十、編譯內核
1、下載內核:git clone https://source.codeaurora.org/external/imx/linux-imx -b git.kernel.org/linux-stable/linux-4.18.y
git checkout imx_4.9.88_2.0.0_ga
2、修改 imx6q-arm2.dts
//modify:添加
pinctrl_uart1: uart1grp {
fsl,pins = <
MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
>;
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart1>;
status = "okay";
};
&usdhc2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usdhc2>;
bus-width = <4>;
cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
wp-gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
status = "okay";
};
pinctrl_usdhc2: usdhc2grp {
fsl,pins = <
MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059
MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10059
MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
MX6QDL_PAD_NANDF_D4__SD2_DATA4 0x17059
MX6QDL_PAD_NANDF_D5__SD2_DATA5 0x17059
MX6QDL_PAD_NANDF_D6__SD2_DATA6 0x17059
MX6QDL_PAD_NANDF_D7__SD2_DATA7 0x17059
>;
};
//modify:刪除 &usdhc3 節點和 pinctrl_usdhc3
//modify:修改網絡接口節點
pinctrl_enet: enetgrp {
fsl,pins = <
MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b030
MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b030
MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b030
MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b030
MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b030
MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b030
MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b030
MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b030
MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b030
MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b030
MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b030
MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b030
MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
>;
};
3.編譯
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make imx_v7_defconfig
make uImage LOADADDR=0x12000000
make imx6q-arm2.dtb
4、在新uboot中啓動內核,掛載網絡文件系統
4.1先設置網卡參數
ifconfig ens38 192.168.1.103 netmask 255.255.255.0
route add default gw 192.168.1.1
setenv ipaddr 192.168.1.106
setenv serverip 192.168.1.101
setenv ethaddr 32:34:46:78:9A:DC
setenv gatewayip 192.168.1.1
4.2讀入內核&&掛載網絡文件系統
setenv bootargs 'noinitrd console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.103:/home/lonnox/work/imx6/nfs_root,v3,tcp ip=192.168.1.6:192.168.1.103:192.168.1.1:255.255.255.0'
//setenv bootargs 'noinitrd console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.104:/home/lonnox/work/imx6/nfs_root,v3,tcp ip=192.168.1.106:192.168.1.104:192.168.1.1:255.255.255.0'
tftp 0x11ffffc0 uImage
tftp 0x18000000 imx6q-arm2.dtb
setenv bootargs ${bootargs}
bootm 0x11ffffc0 - 0x18000000
5、在新uboot中燒錄uImage和imx6q-arm2.dtb
mmc dev 1 0
tftp 0x11ffffc0 uImage
mmc write 0x11ffffc0 0x800 0x4000
tftp 0x18000000 imx6q-arm2.dtb
mmc write 0x18000000 0x5000 0x800
setenv bootargs 'noinitrd console=ttymxc0,115200 loglevel=8 root=/dev/mmcblk3p1 rw init=/linuxrc'
setenv bootcmd 'mmc dev 1; mmc read 0x11ffffc0 0x800 0x4000; mmc read 0x18000000 0x5000 0x800; bootm 0x11ffffc0 - 0x18000000'
saveenv
run bootcmd
十一、製作文件系統
1、測試燒錄老版本文件系統
mksdcard.sh /dev/mmcblk1
//mkfs.ext3 -j /dev/mmcblk1p1 //???一定要使用mkfs.ext3
mke2fs -j /dev/mmcblk1p1
mkdir -p /mnt/mmcblk1p0
mount -t ext3 /dev/mmcblk1p1 /mnt/mmcblk1p0
tar --numeric-owner -zxvf rootfs.tgz -C /mnt/mmcblk1p0
umount /mnt/mmcblk1p0