电子工程专辑互动社区>自由讨论>嵌入式系统专区>S5PV210(TQ210)学习笔记——内核移植与文件系统构建之一
大家在做什么
作者 问题:

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

发布时间:2016-1-8 上午11:19

作者: embedsky

等级: 青铜少侠

积分: 907分

发帖数: 143次

网站总积分: 1017分

经验值: 15.0

查看用户的所有发言

查看用户的个人e空间

需要确认注册邮箱后才能下载,立即确认我的邮箱
回复后可下载附件 关闭
  由于之前做过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行改为:
  ARCH = arm
  CROSS_COMPILE ?= arm-linux-
  (2)进行默认配置,进入arch/arm/configs目录,可以发现最接近我们开发板的配置文件是s5pv210_defconfig,故
  make s5pv210_defconfig
  (3)编译内核,如果需要生成zImage则执行
  make zImage
  如果需要生成uImage则执行
  make uImage
  (4)用uboot下载并尝试运行,结果是悲剧的,在uboot打印”Starting kernel...“之后就看不到任何输出了,显然,有两种原因:
  a. 编译的内核类型错误,比如您的uboot使用的是uImage,而您编译的是zImage。
  b. 移植的uboot存在问题,没能正确的拷贝内核到正确的内存地址并启动。
  c. 内核存在某些配置,我们没有配置。
  经过查看内核配置项知道,内核默认采用的UART1打印调试信息,因此,执行:
  make menuconfig
  在出来的对话中依次选择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)创建根文件系统目录结构,可以使用如下脚本:
  #!/bin/sh
  echo "------Create rootfs directons start...--------"
  mkdir rootfs
  cd rootfs
  echo "--------Create root,dev....----------"
  mkdir root dev etc boot tmp var sys proc lib mnt home usr
  mkdir etc/init.d etc/rc.d etc/sysconfig
  mkdir usr/sbin usr/bin usr/lib usr/modules
  echo "make node in dev/console dev/null"
  sudo mknod -m 600 dev/console c 5 1
  sudo mknod -m 600 dev/null c 1 3
  mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
  mkdir var/lib var/lock var/run var/tmp
  chmod 1777 tmp
  chmod 1777 var/tmp
  echo "-------make direction done---------"
  在这里我将脚本命名为mkrootfs.sh,接下来给脚本加可执行权限(即chmod a+x mkrootfs)并运行脚本。我的脚本是在/nfsroot目录下运行的,所以我的根文件系统的根目录为/nfsroot/rootfs,后面均以该目录为例阐述。
  (2)编译Busybox
  到Busybox下载最新版的Busybox源码,我是用的是1.21.0版本,下载完后解压并进入busybox目录,首先是配置busybox
  make menuconfig
  配置菜单跟配置内核时的差不多,依次进入Busybox Settings => Build Options => Cross Compiler prefix (NEW),设置为编译器的前缀,我的是arm-linux-。网上有些朋友还推荐选择Busybox Settings => Build Options => Build BusyBox as a static binary (no shared libs),但是如果我们正确拷贝编译器了运行库的话,不设置也可以。现在可以编译Busybox了,执行
  make
  编译过程很顺利,我这里没有遇到任何错误,接下来将编译好的Busybox安装到/nfsroot/rootfs就可以了,执行
  make CONFIG_PREFIX=/nfsroot/rootfs install
  (3)拷贝编译器运行库
  我的编译器是4.5.1版本的,拷贝arm-none-linux-gnueabi/sys-root/lib的所有动态库到/nfsroot/rootfs/lib下,为了不拷贝连接,应该加上”-d"选项,执行
  cp *so* /nfsroot/rootfs/lib -d
  同样拷贝arm-none-linux-gnueabi/sys-root/usr/lib下的所有动态库到/nfsroot/rootfs/usr/lib下,执行
  cp *so* /nfsroot/rootfs/usr/lib -d
  (4)构建etc目录
  在etc目录下创建Inittab文件,内容如下
  ::sysinit:/etc/init.d/rcS
  console::askfirst:-/bin/sh
  ::restart:/sbin/init
  ::ctrlaltdel:/sbin/reboot
  ::shutdown:/bin/umount -a -r
  ::shutdown:/sbin/swapoff -a
  在etc/init.d/目录下创建rcS文件,内容如下
  echo "----------mount all.........."
  mount -a
  echo "----------Starting mdev......"
  echo /sbin/mdev > /proc/sys/kernel/hotplug
  mdev -s
  /bin/hostname -F /etc/sysconfig/HOSTNAME
  为inittab和rcS文件添加可执行权限
  chmod a+x inittab
  chmod a+x rcS
  在etc目录下创建fstab文件,内容如下
  #evice mount-point type option dump fsck order
  proc /proc proc defaults 0 0
  none /tmp ramfs defaults 0 0
  mdev /dev ramfs defaults 0 0
  sysfs /sys sysfs defaults 0 0
  在etc目录下创建profile文件,内容如下
  PATH=/bin:/sbin:/usr/bin:/usr/sbin
  export PATH
  #set hostname
  HOSTNAME='/bin/hostname'
  export HOSTNAME
  # Set PS1
  PS1='[u@h W]$'
  export PS1
  拷贝主机/etc目录下的passwd和group文件到etc目录下。
  (5) 设置HOSTNAME文件
  在etc/sysconfig目录下创建HOSTNAME文件,在文件中写入主机名,我这里写的是bruce。
  (6) 安装内核modules
  进入内核源码目录,执行
  make modules
  待编译完成后安装modules,执行指令
  make modules_install INSTALL_MOD_PATH=/nfsroot/rootfs
  到这,根文件系统就构建完成了。
引用 回复 鲜花 ( 0) 臭鸡蛋 ( 0) 有新回复时发送邮件通知

与?s5pv210,文件系统,内核,嵌入式,开发板?相关的话题
?
快速回复
用户名:?
美国的游客?????? (您将以游客身份发表,请登陆 | 注册 ) ?
标题: * 你还可以输入80
评论: * 你还可以输入10000
分享到: 新浪微博?? qq空间?? qq微博?? 人人网?? 百度搜藏??
验证码: ?*?
维护专业、整洁的论坛环境需要您的参与,请及时举报违规帖子,如果举报属实,我们将给予相应的积分奖励。
谢谢您的热心参与!
返回嵌入式系统专区 | 返回自由讨论
本论坛仅陈述专家或个人观点,并不代表电子工程专辑网站立场。
返回论坛页首
有问题请反馈