uboot移植(uboot2016移植)
移植uboot2016.03版本
主要修改:配置文件,板子头文件。驱动文件
注意使用低版本的交叉编译工具,板子运行报错。
1、修改配置文件
找到符合自己板子的配置文件–mx6ull_14x14_evk_emmc_deconfig
复制一份
1 | cp mx6ull_14x14_evk_emmc_deconfig mx6ull_naro_emmc_deconfig |
文件内容修改如下
1 | CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_naro/imximage.cfg,MX6ULL_EVK_EMMC_REWORK" |
修改第一条板级配置文件路径,修改第四条编译的选项。
2、修改板子的头文件
找到include/configs/mx6ullevk.h,复制一份
1 | cp mx6ullevk.h mx6ull_naro.h |
将开头的编译宏改为
1 |
移植uboot的是时候没有某个功能可以到下面这个文件中找
1 |
3、修改板子board文件夹下文件
将board/freescale/mx6ullevk复制一份,命名为mx6ull_naro
1 | cp -r board/freescale/mx6ullevk board/freescale/mx6ull_naro |
修改board/freescale/mx6ull_naro/Kconfig
原本的:1
2
3
4
5
6
7
8
9
10
11
12
13if TARGET_MX6ULL_14X14_EVK || TARGET_MX6ULL_9X9_EVK
config SYS_BOARD
default "mx6ullevk"
config SYS_VENDOR
default "freescale"
config SYS_CONFIG_NAME
default "mx6ullevk"
endif改为:
1
2
3
4
5
6
7
8
9
10
11
12if TARGET_MX6ULL_NARO
config SYS_BOARD
default "mx6ull_naro"
config SYS_VENDOR
default "freescale"
config SYS_CONFIG_NAME
default "mx6ull_naro"
endif修改makefile
1 |
|
修改为:
1 | obj-y := mx6ull_naro.o |
修改imximage.cfg
原来的1
2
3
4ifdef CONFIG_USE_PLUGIN
/*PLUGIN plugin-binary-file IRAM_FREE_START_ADDR*/
PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000
else改为:
1
2
3
4ifdef CONFIG_USE_PLUGIN
/*PLUGIN plugin-binary-file IRAM_FREE_START_ADDR*/
PLUGIN board/freescale/mx6ull_naro/plugin.bin 0x00907000
else修改MAINTAINERS文件
原来的:1
2
3
4
5
6
7MX6ULLEVK BOARD
M: Peng Fan <peng.fan@nxp.com>
S: Maintained
F: board/freescale/mx6ullevk/
F: include/configs/mx6ullevk.h
F: configs/mx6ull_14x14_evk_defconfig
F: configs/mx6ull_9x9_evk_defconfig修改为:
1
2
3
4
5
6MX6ULLEVK BOARD
M: Peng Fan <peng.fan@nxp.com>
S: Maintained
F: board/freescale/mx6ull_naro/
F: include/configs/mx6ull_naro.h
4、修改图形配置文件
修改arch/arm/cpu/armv7/mx6/Kconfig,找到mx6ull相关的配置,添加以下内容
1 | source "board/freescale/mx6ull_naro/Kconfig" |
1 | config TARGET_MX6ULL_NARO |
5、修改lcd
在board/freescale/mx6ull_naro/mx6ull_naro.c,修改如下代码
1 | struct display_info_t const displays[] = {{ |
.pixclock 这个值要参考屏幕的的手册。
6、修改网络驱动
- 在mx6ull_naro.h中修改为:
1
2
3
4
5
6
7
8
9
10
11
1 |
- 在mx6ull_naro.c中,修改复位口,如下:
1
2
3
4
5
6// #define IOX_SDI IMX_GPIO_NR(5, 10)
// #define IOX_STCP IMX_GPIO_NR(5, 7)
// #define IOX_SHCP IMX_GPIO_NR(5, 11)
// #define IOX_OE IMX_GPIO_NR(5, 8)
继续往下找:将这部分注释掉
1 |
|
注释掉下面的内容
1 | static void iox74lv_init(void) |
还有这个,板子的初始化中
1 | nt board_init(void) |
在网口的接口体中添加复位接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29static iomux_v3_cfg_t const fec1_pads[] = {
MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),
MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET1_TX_DATA0__ENET1_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET1_TX_DATA1__ENET1_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET1_TX_EN__ENET1_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL),
MX6_PAD_ENET1_RX_DATA0__ENET1_RDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET1_RX_DATA1__ENET1_RDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
static iomux_v3_cfg_t const fec2_pads[] = {
MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),
MX6_PAD_GPIO1_IO07__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET2_TX_DATA0__ENET2_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET2_TX_DATA1__ENET2_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL),
MX6_PAD_ENET2_TX_EN__ENET2_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET2_RX_DATA0__ENET2_RDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET2_RX_DATA1__ENET2_RDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET2_RX_EN__ENET2_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
};修改复位函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21static void setup_iomux_fec(int fec_id)
{
if (fec_id == 0) {
imx_iomux_v3_setup_multiple_pads(fec1_pads,
ARRAY_SIZE(fec1_pads));
gpio_direction_output(ENET1_RESET, 1);
gpio_set_value(ENET1_RESET, 0);
mdelay(20);
gpio_set_value(ENET1_RESET, 1);
}
else
{
imx_iomux_v3_setup_multiple_pads(fec2_pads,
ARRAY_SIZE(fec2_pads));
gpio_direction_output(ENET2_RESET, 1);
gpio_set_value(ENET2_RESET, 0);
mdelay(20);
gpio_set_value(ENET2_RESET, 1);
}
}在uboot/drivers/net/phy/phy.c中添加如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17int genphy_update_link(struct phy_device *phydev)
{
unsigned int mii_reg;
static int lan8720_flag = 0;
int bmcr_reg = 0;
if (lan8720_flag == 0) {
bmcr_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);
while (phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR) & 0X8000) {
udelay(100);
}
phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr_reg);
lan8720_flag = 1;
}
不然网络复位有问题
7、修改板子名字
1 | int checkboard(void) |
8、编译测试
重置环境变量
1 | env default -a |
配置uboot网络环境,有两个网口,设置mac要注意顺序
1 | setenv ipaddr 192.168.8.11 |
启动后。测试ping通,显示正常。
1 | => ping 192.168.8.9 |
1 | setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw' |
可以通过下面命令核对。
1 | mmc part |
网络挂载系统
1 | setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw' |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 naro!