您的位置 首页 元件

S5PV210(TQ210)学习笔记——内核移植与文件体系构建

由于之前做过2440和6410,鉴于时间原因,这里暂时跨过其他模块的裸机驱动和uboot移植,直接进入内核移植及驱动开发方面的学习。内核移植其

因为之前做过2440和6410,鉴于时刻原因,这儿暂时跨过其他模块的裸机驱动和uboot移植,直接进入内核移植及驱动开发方面的学习。

内核移植其实很简单,因为内核是linus带领的linux内核开发团队开发并保护的,咱们只需求跟咱们的渠道穿插编译一下即可运用,可是,内核移植也不简单,因为内核移植起见呈现任何问题都可能会被卡住,因为内核代码十分巨大,咱们无法通读内核代码,下面是我移植期间遇到的各种悲催的问题和解决方案,首先是必备的开发环境:

a) Linux内核代码,版别3.8.3

b) S5PV210开发板(我的是TQ210)

c) HOST环境是WIN7(64位)下装置的Ubuntu虚拟机(12.10)

一 内核编译

从Linux内核网站(kernel.org)下载内核代码、解压并进入内核目录

(1)批改Makefile,将195行和196行改为:

  1. ARCH=arm
  2. CROSS_COMPILE?=arm-linux-

(2)进行默许装备,进入arch/arm/configs目录,能够发现最接近咱们开发板的装备文件是s5pv210_defconfig,故

  1. makes5pv210_defconfig

(3)编译内核,假如需求生成zImage则履行

  1. makezImage

假如需求生成uImage则履行

  1. makeuImage

(4)用uboot下载并测验运转,结果是悲惨剧的,在uboot打印”Starting kernel…“之后就看不到任何输出了,明显,有两种原因:

a. 编译的内核类型过错,比方您的uboot运用的是uImage,而您编译的是zImage。

b. 移植的uboot存在问题,没能正确的复制内核到正确的内存地址并发动。

c. 内核存在某些装备,咱们没有装备。

通过查看内核装备项知道,内核默许选用的UART1打印调试信息,因而,履行:

  1. makemenuconfig

在出来的对话中顺次挑选System type =>(1) S3C UART to use for low-level messages,在编辑框中将1改为0,然后保存装备并再次编译内核,直接履行make即可,无需make clean。假如是初次履行make menuconfig会遇到过错,这是因为make menuconfig依靠一个库,这儿我忘掉姓名了,假如是ubuntu能够直接用指令装置的,网上搜一下就能够搞定。

编译完内核之后再次下载并测验运转,这时,能够看到内核打印的信息了,假如您不幸只看到“Uncompressing Linux… done, booting the kernel.”就没有任何输出了,那么请查看uboot传入的机器码跟内核机器码是否匹配,假如不匹配请批改,然后从头编译运转内核或许uboot,假如批改之后依然看不到其他输出,那么请查看uboot的bootargs参数,bootargs中有必要装备console=ttySAC0,不然也看不到打印信息。

假如没有呈现上面的过错,那么您的内核现已能够打印出许多信息,可是因为内核默许没有供给对Nand或网卡的支撑,无法挂接文件体系,所以依然无法正常运转。为了能使内核进入控制台,为后边的驱动开发供给环境,咱们先制造文件体系,然后来移植网卡驱动,让内核NFS方法挂接文件体系,然后咱们就能够开发其他驱动了,如Nand、LCD、声卡等等。

二 构建文件体系

其实构建文件体系仍是比较简单的,留意几个当地,然后墨守成规的来就能够了。

(1)创立根文件体系目录结构,能够运用如下脚本:

  1. #!/bin/sh
  2. echo”——Createrootfsdirectonsstart…——–“
  3. mkdirrootfs
  4. cdrootfs
  5. echo”——–Createroot,dev….———-“
  6. mkdirrootdevetcboottmpvarsysproclibmnthomeusr
  7. mkdiretc/init.detc/rc.detc/sysconfig
  8. mkdirusr/sbinusr/binusr/libusr/modules
  9. echo”makenodeindev/consoledev/null”
  10. sudomknod-m600dev/consolec51
  11. sudomknod-m600dev/nullc13
  12. mkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/temp
  13. mkdirvar/libvar/lockvar/runvar/tmp
  14. chmod1777tmp
  15. chmod1777var/tmp
  16. echo”——-makedirectiondone———“

在这儿我将脚本命名为mkrootfs.sh,接下来给脚本加可履行权限(即chmod a+x mkrootfs)并运转脚本。我的脚本是在/nfsroot目录下运转的,所以我的根文件体系的根目录为/nfsroot/rootfs,后边均以该目录为例论述。

(2)编译Busybox

到Busybox下载最新版的Busybox源码,我是用的是1.21.0版别,下载完后解压并进入busybox目录,首先是装备busybox

  1. makemenuconfig

装备菜单跟装备内核时的差不多,顺次进入Busybox Settings =>Build Options =>Cross Compiler prefix (NEW),设置为编译器的前缀,我的是arm-linux-。网上有些朋友还引荐挑选Busybox Settings => Build Options =>Build BusyBox as a static binary (no shared libs),可是假如咱们正确复制编译器了运转库的话,不设置也能够。现在能够编译Busybox了,履行

  1. make

编译进程很顺畅,我这儿没有遇到任何过错,接下来将编译好的Busybox装置到/nfsroot/rootfs就能够了,履行

  1. makeCONFIG_PREFIX=/nfsroot/rootfsinstall

(3)复制编译器运转库

我的编译器是4.5.1版别的,复制arm-none-linux-gnueabi/sys-root/lib的一切动态库到/nfsroot/rootfs/lib下,为了不复制衔接,应该加上”-d”选项,履行

  1. cp*so*/nfsroot/rootfs/lib-d

相同复制arm-none-linux-gnueabi/sys-root/usr/lib下的一切动态库到/nfsroot/rootfs/usr/lib下,履行

  1. cp*so*/nfsroot/rootfs/usr/lib-d

(4)构建etc目录

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/256191.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部