完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这节进行一个linux内核的移植。
一。内核源码的下载 内核源码官网 进入官网 点击 红框 下载 我们这里选用linux3.14版本,移植的思路是相同的。 二。内核的配置编译 1.现在我们有官方源码了,通过共享文件夹传入到linux虚拟机中。 cp windows_file/linux-3.14.tar.xz ~/mytest 2.Linux系统中解压 ( tar -xvf linux-3.14.tar.xz 注意不能在与window的共享目录解压) 3.修改Makefile 指定交叉编译工具链 (可以通过 1》make menuconfig进行设置,2》也可以直接vim Makefile进行设置 vim Makefile (198行) ARCH ?= arm CROSS_COMPILE ?= arm-none-linux-gnueabi- 3》也可以不指定直接使用指令 make ARCH=arm exynos_defconfig, 这里就直接从Makefile文件中改的。 ) 4.导入配置 make exynos_defconfig(配置列表见 arch/arm/configs/ 找最类似的,也许直接可以用偶) 先不修改,进行内核和设备树的编译先试一下,保持最小的改动。注意生成的固件名称要和boot中指定的参数要一致。(不然怎么启动啊。bootcmd=tftp 41000000 uImage;tftp 42000000 exynos4412-origen.dtb;bootm 41000000 - 42000000 ) 5. make uImage 编译内核 make dtbs 编译设备树(现在最新版本的内核都是使用设备树了) 使用 linux-4.4.82/arch/arm/boot/uImage 和 linux-4.4.82/arch/arm/boot/dts/exynos4412-origen.dtb 将两个固件复制到我们的/tftpboot/目录下,进行板卡启动。 至此没有异常的话可以正常启动 linux, 但是挂载不了根文件系统,因为没有配置网卡驱动(NFS服务无法使用) 6.make menuconfig 进行菜单配置 我们知道了需要配置我们的网卡驱动。执行命令后,报错了。 make menuconfig‘ requires the ncurses libraries. make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1 然后执行以下命令: sudo apt-get install ncurses-dev 然后再make menuconfig 就没有问题了 进入菜单,主要配置网络协议支持TCP/IP 配置网络支持网络文件系统NFS File systems-》Network File Systems--》 配置支持Dm9000网卡 Device Drivers--》Network device support--》Ethernet driver support--》 菜单配置完了, 这回可以正常执行了吧?其实是不确定的,因为每家的开发板是不一样的,使用的硬件接口也可能不同, 所以还需要我们改一下硬件的对应关系,从设备树中添加。 配置设备树描述网卡和CPU的链接情况 srom-cs1@5000000 { compatible = “simple-bus”; #address-cells = 《1》; #size-cells = 《1》; reg = 《0x5000000 0x1000000》; 对应芯片手册 3 Memory Map 的0x0500_0000 和 16 MB ranges; ethernet@5000000 { compatible = “davicom,dm9000”; 内核通过该名字来匹配驱动 reg = 《0x5000000 0x2 0x5000004 0x2》; 寄存器地址和数据宽度 interrupt-parent = 《&gpx0》; 继承于 中断控制器gpx0 interrupts = 《6 4》; 6 对应中断源 DM9000_IRQ -》 XEINT6 。 davicom,no-eeprom; mac-address = [00 0a 2d a6 55 a2]; }; }; 找到firmware的节点,然后将他注释掉: firmware@0203F000 { compatible = “samsung,secure-firmware”; reg = 《0x0203F000 0x1000》; }; 为: /* firmware@0203F000 { compatible = “samsung,secure-firmware”; reg = 《0x0203F000 0x1000》; }; */ 为什么要注释掉这段代码,有的时候需要,有的时候不需要,和uboot相关需要添加备注: firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。 设备树中的含义之后详细说, 如果还是不能正常挂载可以 修改文件driver/clk/clk.c static bool clk_ignore_unused;改为static bool clk_ignore_unused = true; 此时在编译内核和设备树,然后板卡就能正常启动了。 |
|
|
|
只有小组成员才能发言,加入小组>>
4273个成员聚集在这个小组
加入小组3275 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4216 浏览 1 评论
4221 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 15:25 , Processed in 0.371873 second(s), Total 43, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号