3.3 uClinux内核的移植

3.3.1 uClinux-dist源码包的准备

从uClinux的官方网站下载uclinux-dist源码包。源码包中包含了uClinux内核、uClibc库和busybox等 uClinux下的用户应用程序,本文中下载的是uClinux-dist-20041215.tar.gz,在linux系统下解压后会生成一个 uClinux-dist目录,该目录包含了编译uClinux内核需要的所有文件。在uClinux-dist目录中包含有linux-2.2.x、 linux-2.4.x、linux-.2.6.x三个子目录,就是三种版本的uClinux内核的源码,我们的目的是把uClinux-2.6.9版本移植到目标平台上,所以我们还需要从上下载linux-2.6.9.tar.bz2,从http: //www.uClinux.org上下载linux-2.6.9-uc0.patch,从Samsung的网站http: //www.oprenSRC.sec.samsung.com上下载补丁文件linux-2.6.9-uc0.hsc0.patch。在Linux系统下解压内核Linux-2.6.9.tar.bz2并打上补丁文件linux-2.6.9-uc0.patch和linux-2.6.9-uc0- hsc0.patch,将打上补丁的2.6.9内核改名为linux-2.6.x并替换在uClinux-dist包中的linux-2.6.x,完成移植前的准备工作。

3.3.2 uClinux-dist源码的修改

按照如下步骤添加S3C44B0的相关文件:

# cp uClinux-dist/vendors/Samsung/4510b –r  uClinux-dist/vendors/Samsung/44b0,将源代码包中已经有的Samsung的4510b的文件复制一份并改名为44b0 ,这一过程也可以直接用鼠标完成;

# cp linux-2.6.x/arch/armnommu/configs/s3c44b0x_defconfig

vendors/Samsung/44b0/config.linux-2.6.x,该步骤是将s3c44b0x_defconfig文件复制到44b0目录下,该步骤同样可以复制、粘贴完成;

虽然已经给linux-2.6.9内核打了补丁文件,但是我们依然需要对源代码进行修改才能顺理的编译通过,文件的修改如下:

(1) 修改linux-2.6.x/arch/armnommu/arch/kernel/vmlinux.lds.S,添加以下内容:

(.got)?Global offset table */

romfs_start = .;

romfs.o

romfs_end = .;

这样修改的目的是把romfs文件系统连接到内核映象中。

(2) 修改linux-2.6.x/arch/armnommu/kernel/setup.c, 添加变量romfs_start,romfs_end及修改

其设置如下:

default_command_line

extern int _stext, _text, _etext, _EDAta, _end;

extern int romfs_start,romfs_end;

char *from = default_command_line;

sprintf(default_command_line, "root=http://www.eeworld.com.cn/dev/ram0 initrd=0x%08lx,%ldk keePINitrd", (unsigned

long)&romfs_start,((unsigned long)&romfs_end - (unsigned long)&romfs_start)>>10);

(3) 修改vendors/MICetek/44b0/rc文件中 /bin/expand /etc/ramfs.img /dev/ram1;

(4) 添加串口驱动程序,添加文件linux-2.6.x/drivers/serial/serial_s3c44b0.c和linux-2.6.x /include/asm-armnommu/arch-s3c44b0/UART.h,因为在linux-2.6.9内核中对S3C44B0的支持并不是很好,系统只是提供了一个简易的串口驱动,所以需要添加串口驱动。

3.3.3 内核的配置与编译

在编译内核之前需要进行配置,可以通过三种方式对内核进行配置:在uClinux-dist目录下运行make config/make menuconfig/make xconfig,其中make config是在字符界面下,make menuconfig是在字符界面下实现的菜单界面,make xconfig为图形界面,三种配置方式是一致的,xconfig界面比较友好,容易掌握,但它却没有menuconfig菜单稳定,而且在有些机器上运行不起来,本文是使用make menuconfig完成的。运行make menuconfig时, 程序会依次出现开发平台、内核、文件系统、应用程序的配置界面, 可以根据自己的需要进行配置。配置时大部分选项可以使用其缺省值,只有小部分需要用户根据需求进行选择,进行内核配置时,有3种选择,它们分别代表的含义如下:

“Y” - 将该功能编译进内核;

“N” -不将该功能编译进内核;

“M” -将该功能编译成可以在需要时动态插入到内核中的模块;

将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响,许多功能都可以这样处理,例如网卡的支持、对FAT等文件系统的支持等。

在配置好内核后依次执行以下命令:

make dep; make clean; make lib_ only; make user_ only; make romfs; make image; make编译完成之后,会在uClinux-dist/linux-2.6.x/下会生linux.bin,在uClinux-dist/images /下会生成linux.data、linux.text、image.bin等目标文件。在编译中可能会产生错误,需要根据错误信息进行调试修改。

3.4 内核的下载运行

(1) 我们将开始移植好的U-Boot的目标文件u-boot.bin通过JTAG烧写到目标硬件平台上,烧写时开始地址要从0开始,目标板上电后从0地址处运行就开始运行移植好的bootloader了,我们可以在windows下通过超级终端或者在linux下的minicom检测目标板的串口输出;

(2) 通过U-Boot的命令tftpboot来下载我们移植好的内核,tftpboot c008000 linux.bin;go c008000,通过以上两个步骤就实现了uClinux的下载运行。

系统启动后,首先执行了bootloader,完成了硬件设备的初始化任务,然后将运行的控制权交给了uClinux内核,uClinux系统就开始运行了。

4 结束语

由于Linux操作系统的源码开放性及ARM微处理器的良好性能,如何将Linux系统移植到ARM平台上得到越来越多的关注。操作系统的移植是构建基于ARM微处理器的嵌入式系统的前题,将bootloader与系统内核分开进行设计能够使软件结构更加清晰,而且可以利用前者的功能,灵活的实现多种引导系统的方式。

本论文的创新点:本文采用移植U-Boot作为系统bootloader,从而实现了uClinux-2.6内核移植。U-Boot作为一种功能强大的bootloader,适合多种平台并可以引导多种操作系统,利用其强大功能可以实现系统内核的多种下载和引导方式,掌握其移植方法很有必要,uClinux2.6内核对硬件平台的支持更好,移植过程中要注意不同硬件平台间的差别。

移植linux内核串口配置,uClinux内核的移植 - bootloader对uClinux的S3C44B0移植相关推荐

  1. Linux树莓派开发——配置树莓派内核源码,内核编译,更换树莓派Linux内核

    目录 一.树莓派Linux源码配置 1.配置的三种方法 2.内核源码的下载 二.树莓派内核编译 1.树莓派的编译 ​2.生成vmlinux 三.更换树莓派内核的详细步骤 一.树莓派Linux源码配置 ...

  2. IPC Hi3518EV300开发板——移植Linux 0.串口快速烧录教程

    前言 因为 Hi3518EV300 是支持HarmonyOS.LiteOS.Linux多系统的,鸿蒙移植因为有 Hi3516DV300,基本都一模一样,所有感觉也没什么可做的,干脆跑Linux吧,顺便 ...

  3. Linux内核移植漫谈——你不是第一个想移植Linux内核的人

    Jack:在读大学的时候我想过移植Linux操作系统. 我:现在呢? Jack:我还是想移植Linux操作系统.你教我移植吧. 我:你知道什么是"Linux内核移植"吗? Jack ...

  4. linux命令设置波特率,Linux设置串口波特率等参数

    stty查看串口参数 stty -F /dev/ttyS0 -a 1 1 查看串口1(/dev/ttyS0)当前的参数,包括波特率.数据位等. stty设置串口参数 stty -F /dev/ttyS ...

  5. jquery程序 windows移植到linux显示不了,windows程序移植linux

    1,路径名统一用正斜杠"/".(windows下正反斜杠都识别,linux只认正斜杠.) 2,统一使用UTF-8格式编码. vim中无法保存汉字时,可输入下列命令: :set fi ...

  6. 将linux内核烧进arm板,ARM开发板上uClinux内核移植

    <ARM开发板上uClinux内核移植>由会员分享,可在线阅读,更多相关<ARM开发板上uClinux内核移植(19页珍藏版)>请在人人文库网上搜索. 1.纷傲掌秀悸篷益哑檀扬 ...

  7. 十六.linux开发之Kernel移植——内核的配置和编译原理

    有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=d25dbce79566963e3699574a74048154& ...

  8. 移植uClinux内核到stm32f407

    上一篇博文讲到了先移植基于stm32f407的u-boot,本文讲到的是最难的移植stm32f407的内核,这个内核源代码我也是在网上找到了,看介绍是国外大神所修改而成的,真的万分感谢这位大神可怜,所 ...

  9. 【移植Linux 3.4.2内核第一步】之简单修改

    前一阵子已经将U-boot移植好了,从今天开始,我们开始移植linux内核.移植的内核为3.4.2,移植的开发板为:jz2440开发板. 想看之前移植U-boot的记录,可以查看我的博客专栏,点击链接 ...

  10. 在ARMSYS(S3C44B0X开发板)上进行uClinux内核移植的总结

    标题 针对"如何在以S3C44B0X为核心的ARMSYS开发板上建立uClinux内核移植"的一个总结,其内容包括对Bootloader的功能分析和uClinux2.4.24发行版 ...

最新文章

  1. 为什么建议大家使用Linux开发?
  2. SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID
  3. 100个JavaScript代码片段
  4. JZOJ 1637. 【ZJOI2009】狼和羊的故事
  5. BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
  6. EOSIO:EOSIO最新版1.4.0创建测试账户
  7. LockSupport实现线程通信
  8. lucene案例demo
  9. try...catch...finally的陷阱——加锁的线程开发经验分享
  10. seqkit根据基因id_基因家族成员的鉴定/基因在染色体上的位置
  11. freeldr 如何调用_BootMain的
  12. 增益带宽积(GBWP、GBW、GBP、GB)
  13. Java solrj client 添加JavaEntity Bean
  14. 宅霸java_宅霸游戏联机平台下载|宅霸游戏联机平台免费版下载 v4.5.0 官方版_小皮网...
  15. 前端JQuery插件distpicker.js的部分操作使用
  16. etc门架系统服务器是什么,ETC门架是什么东西?ETC龙门架作用
  17. 【黑马程序员pink老师前端】HTML
  18. Git介绍、安装、环境配置及常用的Git命令
  19. PrimeNG安装使用
  20. Linux用户登录和注销

热门文章

  1. android触摸 apk,超级触控(流畅触屏)apk
  2. Endnote 插入文献导致word崩溃!!解决方法
  3. 微信公众号 scanQRCode:fail, the permission value is offline verifying
  4. Android Sensor感应器简单使用(1)
  5. arcgis的重采样和插值方法
  6. ssh-hostbased配置方法
  7. 建筑设计全过程碳排放计算与案例分析
  8. android 简易英汉字典,英汉字典(新版)
  9. 淘宝API(拍立淘)———图片搜索
  10. 程序员的十个层次 你属于哪一层?