深圳市航顺芯片技术研发有限公司
直播中

那些年儿ing

11年用户 1281经验值
擅长:84784
私信 关注
[问答]

怎样去移植linux内核呢

怎样去移植linux内核呢?有哪些操作流程?

回帖(1)

杨丽

2021-10-19 17:51:59
  这节进行一个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;
  此时在编译内核和设备树,然后板卡就能正常启动了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分