200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 移植Linux 6.3.5系统到imx6ull开发板

移植Linux 6.3.5系统到imx6ull开发板

时间:2023-05-09 09:08:20

相关推荐

移植Linux 6.3.5系统到imx6ull开发板

目录

1.下载Linux源码包

2.解压源码包

3.清理工程

4.编译

4.1.选择imx6ull默认配置文件

4.2.编译

4.3.编译报错

4.4.编译通过

4.5.下载验证

5.Linux中添加自己的开发板

5.1.添加开发板默认配置文件

5.2.添加开发板对应的设备树文件

5.3.修改设备树目录下的Makefile文件

5.4.编译

本章主要是移植Linux 6.3.5版本到imx6ull 开发板

1.下载Linux源码包

下载链接:

linux-6.3.5.tar.gz:/kernel/

2.解压源码包

解压命令:

tar-zxvflinux-6.3.5.tar.gz

3.清理工程

在编译Linux之前,我们先对源码工程进行清理一下

makeclean

4.编译

4.1.选择imx6ull默认配置文件

配置文件所在文件夹:arch/arm/configs ls查看配置文件有哪些,一眼看见imx系列有imx_v4_v5_defconfig和imx_v6_v7_defconfig两个默认的配置文件,但是我们选择哪个进行配置编译呢?

toto@toto:~/workspace/kernel/linux-6.3.5$lsarch/arm/configs/am200epdkit_defconfigexynos_defconfigmilbeaut_m10v_defconfigomap2plus_defconfigsocfpga_defconfigaspeed_g4_defconfigfootbridge_defconfigmmp2_defconfigorion5x_defconfigsp7021_defconfigaspeed_g5_defconfiggemini_defconfigmoxart_defconfigoxnas_v6_defconfigspear13xx_defconfigassabet_defconfigh3600_defconfigmps2_defconfigpxa168_defconfigspear3xx_defconfigat91_dt_defconfighisi_defconfigmulti_v4t_defconfigpxa3xx_defconfigspear6xx_defconfigaxm55xx_defconfigimxrt_defconfigmulti_v5_defconfigpxa910_defconfigspitz_defconfigbcm2835_defconfigimx_v4_v5_defconfigmulti_v7_defconfigpxa_defconfigstm32_defconfigclps711x_defconfigimx_v6_v7_defconfigmv78xx0_defconfigqcom_defconfigsunxi_defconfigcollie_defconfigintegrator_defconfigmvebu_v5_defconfigrealview_defconfigtegra_defconfigdavinci_all_defconfigixp4xx_defconfigmvebu_v7_defconfigrpc_defconfigu8500_defconfigdove_defconfigjornada720_defconfigmxs_defconfigs3c6400_defconfigversatile_defconfigdram_0x00000000.configkeystone_defconfigneponset_defconfigs5pv210_defconfigvexpress_defconfigdram_0xc0000000.configlpae.confignetwinder_defconfigsama5_defconfigvf610m4_defconfigdram_0xd0000000.configlpc18xx_defconfignhk8815_defconfigsama7_defconfigvt8500_v6_v7_defconfigep93xx_defconfiglpc32xx_defconfigomap1_defconfigshmobile_defconfigwpcm450_defconfig

网上查询了一下得知:imx_v4_v5_defconfig用于arm-v4,v5架构,而imx_v6_v7_defconfig用于arm-v6,v7架构的处理器 而imx6ull是arm-v7架构的,因此我们选择imx_v6_v7_defconfig进行配置编译。

4.2.编译

修改Makefile文件,在如下地方添加如下两行

#Crosscompilingandselectingdifferentsetofgcc/bin-utils#---------------------------------------------------------------------------##WhenperformingcrosscompilationforotherarchitecturesARCHshallbeset#tothetargetarchitecture.(Seearch/*forthepossibilities).#ARCHcanbesetduringinvocationofmake:#makeARCH=ia64#AnotherwayistohaveARCHsetintheenvironment.#ThedefaultARCHisthehostwheremakeisexecuted.#CROSS_COMPILEspecifytheprefixusedforallexecutablesused#duringcompilation.Onlygccandrelatedbin-utilsexecutables#areprefixedwith$(CROSS_COMPILE).#CROSS_COMPILEcanbesetonthecommandline#makeCROSS_COMPILE=ia64-linux-#AlternativelyCROSS_COMPILEcanbesetintheenvironment.#DefaultvalueforCROSS_COMPILEisnottoprefixexecutables#Note:SomearchitecturesassignCROSS_COMPILEintheirarch/*/MakefileARCH?=armCROSS_COMPILE?=arm-linux-gnueabihf-

编译指令

makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-distclean/*清理工程*/makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-imx_v6_v7_defconfig/*选择配置文件*/makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf--j8/*提高编译速率,采用8线程编译*/

4.3.编译报错

经过1个小时的编译,结果报错了,如下;

LD[M]drivers/siox/siox-bus-gpio.koLD[M]net/bluetooth/bnep/bnep.koKSYMS.tmp_vmlinux.kallsyms2.SAS.tmp_vmlinux.kallsyms2.SLDvmlinuxNMSystem.mapSORTTABvmlinuxOBJCOPYarch/arm/boot/ImageKernel:arch/arm/boot/ImageisreadyASarch/arm/boot/compressed/head.oLDSarch/arm/boot/compressed/vmlinux.ldsLZOarch/arm/boot/compressed/piggy_data/bin/sh:1:lzop:notfoundCCarch/arm/boot/compressed/misc.oarch/arm/boot/compressed/Makefile:162:recipefortarget'arch/arm/boot/compressed/piggy_data'failedmake[2]:***[arch/arm/boot/compressed/piggy_data]Error127make[2]:***正在删除文件“arch/arm/boot/compressed/piggy_data”make[2]:***正在等待未完成的任务....arch/arm/boot/Makefile:58:recipefortarget'arch/arm/boot/compressed/vmlinux'failedmake[1]:***[arch/arm/boot/compressed/vmlinux]Error2arch/arm/Makefile:301:recipefortarget'zImage'failedmake:***[zImage]Error2

原因:lzop库未找到 解决方法:手动安装lzop库

sudoapt-getinstalllzop

4.4.编译通过

toto@toto:~/workspace/kernel/linux-6.3.5$makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf--j8CALLscripts/checksyscalls.shKernel:arch/arm/boot/ImageisreadyCCarch/arm/boot/compressed/string.oASarch/arm/boot/compressed/hyp-stub.oCCarch/arm/boot/compressed/decompress.oLZOarch/arm/boot/compressed/piggy_dataCCarch/arm/boot/compressed/fdt_rw.oCCarch/arm/boot/compressed/fdt_ro.oCCarch/arm/boot/compressed/fdt_wip.oCCarch/arm/boot/compressed/fdt.oCCarch/arm/boot/compressed/fdt_check_mem_start.oASarch/arm/boot/compressed/lib1funcs.oASarch/arm/boot/compressed/ashldi3.oASarch/arm/boot/compressed/bswapsdi2.oASarch/arm/boot/compressed/piggy.oLDarch/arm/boot/compressed/vmlinuxOBJCOPYarch/arm/boot/zImageKernel:arch/arm/boot/zImageisready

4.5.下载验证

将编译好的zImage和imx6ull-14x14-evk.dtb下载到开发板上 1.从网络启动 Linux 系统,设置u-boot下bootcmd和bootargs,

setenvbootargs'console=ttymxc0,115200root=/dev/mmcblk1p2rootwaitrw'setenvbootcmd'tftp80800000zImage;tftp83000000imx6ull-14x14-evk.dtb;bootz80800000-83000000'saveenv

重启开发板,串口打印信息如下;

[2.469400]platformregulatory.0:Fallingbacktosysfsfallbackfor:regulatory.db[2.477276]ALSAdevicelist:[2.480344]Nosoundcardsfound.[2.485955]/dev/root:Can'topenblockdev[2.490552]VFS:Cannotopenrootdevice"mmcblk1p2"orunknown-block(179,2):error-6[2.498729]Pleaseappendacorrect"root="bootoption;herearetheavailablepartitions:[2.507139]010065536ram0[2.507171](driver?)[2.513427]010165536ram1[2.513457](driver?)[2.519697]010265536ram2[2.519730](driver?)[2.525878]010365536ram3[2.525904](driver?)[2.532141]010465536ram4[2.532171](driver?)[2.538374]010565536ram5[2.538403](driver?)[2.544549]010665536ram6[2.544574](driver?)[2.550841]010765536ram7[2.550872](driver?)[2.557018]010865536ram8[2.557043](driver?)[2.563254]010965536ram9[2.563283](driver?)[2.569508]010a65536ram10[2.569537](driver?)[2.575771]010b65536ram11[2.575797](driver?)[2.582113]010c65536ram12[2.582145](driver?)[2.588435]010d65536ram13[2.588464](driver?)[2.594697]010e65536ram14[2.594723](driver?)[2.601037]010f65536ram15[2.601065](driver?)[2.607313]b3007634944mmcblk1[2.607339]driver:mmcblk[2.614243]b3084096mmcblk1boot0[2.614272](driver?)[2.621211]b3104096mmcblk1boot1[2.621243](driver?)[2.628142]b31815558144mmcblk0[2.628171]driver:mmcblk[2.635045]b31915556608mmcblk0p1ab37899a-01[2.635076][2.641989]Kernelpanic-notsyncing:VFS:Unabletomountrootfsonunknown-block(179,2)[2.650483]---[endKernelpanic-notsyncing:VFS:Unabletomountrootfsonunknown-block(179,2)]---Kernelpanic-notsyncing:VFS:Unabletomountrootfsonunknown-block(179,2)

也就是提示内核崩溃,因为 VFS(虚拟文件系统)不能挂载根文件系统,因为根文件系统目录不存在。即使根文件系统目录存在,如果根文件系统目录里面是空的依旧会提示内核崩溃。这个就是根文件系统缺失导致的内核崩溃,但是内核是启动了的,只是根文件系统不存在而已。 本来开发板的eMMC默认是格式化分区好了,linux成功启动后就能成功挂载根文件系统,但是我们是为了学习的,eMMC的分区也应该知道怎么弄。因此在u-boot将eMMC分区擦除,后面自己手动来格式化分区eMMC。Linux系统启动后就会看到上面的信息“Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2)”,提示内核崩溃。 跟文件系统的制作和加载将在下一篇文章进行详细介绍。

5.Linux中添加自己的开发板

下面我们来学习如何在Linux中添加自己的开发板信息。 在Linux中添加自己的开发板信息跟在u-boot中添加自己的开发板是一样的。

5.1.添加开发板默认配置文件

将 arch/arm/configs 目录下的 imx_v6_v7_mfg_defconfig 重新复制一份,命名为imx_toto_defconfig,命令如下:

cdarch/arm/configscpimx_v6_v7_defconfigimx_toto_defconfig

后面 imx_toto_defconfig 就是我们开发板的默认配置文件了,使用如下命令进行配置开发板对应的Linux内核:

makeimx_toto_defconfig

5.2.添加开发板对应的设备树文件

添加适合 imx6ull 开发板的设备树文件,进入目录 arch/arm/boot/dts 中,可以看到Linux中有很多imx6ull版本的设备树文件

toto@toto:~/workspace/kernel/linux-6.3.5/arch/arm/boot/dts$lsimx6ullimx6ull-14x14-evk.dtbimx6ull-colibri-wifi.dtsiimx6ull-opos6ul.dtsiimx6ull-14x14-evk.dtsimx6ull-colibri-wifi-eval-v3.dtbimx6ull-phytec-phycore-som.dtsiimx6ull-colibri-aster.dtbimx6ull-colibri-wifi-eval-v3.dtsimx6ull-phytec-segin.dtsiimx6ull-colibri-aster.dtsimx6ull-colibri-wifi-iris.dtbimx6ull-phytec-segin-ff-rdk-emmc.dtbimx6ull-colibri-aster.dtsiimx6ull-colibri-wifi-iris.dtsimx6ull-phytec-segin-ff-rdk-emmc.dtsimx6ull-colibri.dtsiimx6ull-colibri-wifi-iris-v2.dtbimx6ull-phytec-segin-ff-rdk-nand.dtbimx6ull-colibri-emmc-aster.dtbimx6ull-colibri-wifi-iris-v2.dtsimx6ull-phytec-segin-ff-rdk-nand.dtsimx6ull-colibri-emmc-aster.dtsimx6ull-dhcom-drc02.dtbimx6ull-phytec-segin-lc-rdk-nand.dtb

我们这里使用 imx6ull-14x14-evk.dts。拷贝 imx6ull-14x14-evk.dts,然后将其重命名为 imx6ull-toto.dts,命令如下:

cdarch/arm/boot/dtscpimx6ull-14x14-evk.dtsimx6ull-toto.dts

.dts 是设备树源码文件,编译 Linux 的时候会将其编译为.dtb 文件

5.3.修改设备树目录下的Makefile文件

打开 arch/arm/boot/dts/Makefile 文件,找 到 “ dtb-$(CONFIG_SOC_IMX6UL) ”配置项,在此配置项中加入“imx6ull-toto.dtb” ,如下所示:

dtb-$(CONFIG_SOC_IMX6UL)+=\imx6ul-14x14-evk.dtb\imx6ul-ccimx6ulsbcexpress.dtb\imx6ul-ccimx6ulsbcpro.dtb\imx6ul-geam.dtb\imx6ul-isiot-emmc.dtb\imx6ul-isiot-nand.dtb\imx6ul-kontron-bl.dtb\imx6ul-kontron-bl-43.dtb\imx6ul-liteboard.dtb\imx6ul-tqma6ul1-mba6ulx.dtb\imx6ul-tqma6ul2-mba6ulx.dtb\imx6ul-tqma6ul2l-mba6ulx.dtb\imx6ul-opos6uldev.dtb\imx6ul-pico-dwarf.dtb\imx6ul-pico-hobbit.dtb\imx6ul-pico-pi.dtb\imx6ul-phytec-segin-ff-rdk-emmc.dtb\imx6ul-phytec-segin-ff-rdk-nand.dtb\imx6ul-prti6g.dtb\imx6ul-tx6ul-0010.dtb\imx6ul-tx6ul-0011.dtb\imx6ul-tx6ul-mainboard.dtb\imx6ull-14x14-evk.dtb\imx6ull-toto.dtb\

25行是我们添加的“imx6ull_toto.dtb”,这样编译 Linux 的时候就可以从 imx6ull-toto.dts 编译出 imx6ull-toto.dtb 文件了。

5.4.编译

现在Linux内核已经添加了imx6ull开发板,接下来就是编译测试。为了方便后续的编译,我们先进行编译脚本的创建,脚本内容如下:

vibuild.sh

#!/bin/shmakeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-distcleanmakeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-imx_toto_defconfigmakeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-all-j8

给编译脚本文件添加可执行权限:

chmod777build.sh

编译

./build.sh

下载验证

Startingkernel...[0.000000]BootingLinuxonphysicalCPU0x0[0.000000]Linuxversion6.3.5-g43eca22d987f-dirty(toto@toto)(arm-linux-gnueabihf-gcc(LinaroGCC7.5-.12)7.5.0,GNUld(Linaro_Binutils-.12)2.28.2.0706)#1SMPSatJun1023:45:23CST[0.000000]CPU:ARMv7Processor[410fc075]revision5(ARMv7),cr=10c5387d[0.000000]CPU:divinstructionsavailable:patchingdivisioncode[0.000000]CPU:PIPT/VIPTnonaliasingdatacache,VIPTaliasinginstructioncache[0.000000]OF:fdt:Machinemodel:Freescalei.MX6UltraLiteLite14x14EVKBoard[0.000000]Memorypolicy:Datacachewritealloc

Linux 内核启动成功,说明我们已经在Linux 内核源码中添加了imx6ull开发板。 至此Linux系统已经移植到imx6ull开发板,但是网络是否正常工作现在还不能知道,需要制作跟文件系统后,Linux启动后成功挂载跟文件系统后才能知道,下一篇将介绍跟文件系统的制作与eMMC的分区。

今天的内容到此就完了,感谢大家的收看,如有不正之处,欢迎批评指正,下期再见!

关于更多嵌入式C语言、FreeRTOS、RT-Thread、Linux应用编程、linux驱动等相关知识,关注公众号【嵌入式Linux知识共享】,后续精彩内容及时收看了解。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。