如何编译一个可以运行的 uClinux Kernel

Linux、Android、uCOS、uCLinux、VxWorks、WinCE等系统比较 Windows CE不仅继承了传统的Windows图形界面,并且在Windows CE平台上可以使用Windows 95/98上的编程工具(如Visual Basic、Visual C++、Visual Studio等)、使用同样的函数、使用同样的界面网格,使绝大多数的应用软件只需简单的修改和移植就可以在Windows CE平台上继续使用。它要求所使用的操作系统体积较小,内建有对中断的响应功能。它具有体积小、稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持,以及丰富的API函数等优点。 阅读详情
 

uClinux Image Compiling User Guide2

uClinux Image Compiling User Guide2 for lumit4510 : how to compile uClinux kernel

说明: 本小节内容是关于如何编译一个可以运行的 uClinux Kernel ( 基于 20040408  版 )

-------------------------------------------------------------------------

这篇文档详细说明了如何从 RedHat9.0 开始,建立交叉编译环境,编译 uClinux 内核,
如何通过 SkyEye 模拟器进行事先验证,然后再下载到真实开发板执行,最后添加自己的应用程序。

有 linux pc 环境的可以在自己的机器上面动手试试,特别适合于还没有开发板的初学者。
**************************************************************************


Step 0 :  安装交叉编译器 GNU Toolchain
1. 下载 arm-elf-tools-20011219.tar.gz
 http://159.226.40.150/lumit/resources/uClinux/Toolchain/arm-elf-tools-20011219.tar.gz

2. 下载 arm-elf-tools-20030314.sh
 http://159.226.40.150/lumit/resources/uClinux/Toolchain/arm-elf-tools-20030314.sh

3. 这两个文件需要在同一个目录下,arm-elf-tools-20030314.sh 是一个可以自动安装的脚本文件
   改变属性为可执行文件:
 chmod 755 arm-elf-tools-20030314.sh 

4. 执行脚本即可完成交叉编译器的安装
 ./arm-elf-tools-20030314.sh

5. 测试一下,输入 arm-elf-gcc 看看是否能够自动补齐?
[admin@localhost admin]$ arm-elf-gcc -v
Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.3/specs
gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)

[admin@localhost admin]$ which arm-elf-gcc
/usr/local/bin/arm-elf-gcc  

表明 arm-elf-gcc 已经安装在 /usr/local/bin/ 目录下了。


Step 1 :   交叉编译 uClinux 内核
1. 下载 uClinux-dist-20040408.tar.gz 到当前工作目录下
        http://159.226.40.150/lumit/resources/uClinux/uClinux-dist-20040408.tar.gz

2. 解压 uClinux-dist-20040408.tar.gz 文件到 uClinux-dist 目录
        tar xvzf uClinux-dist-20040408.tar.gz
   此时当前工作目录下增加了一个名为 uClinux-dist 的目录。

3. 进入 uClinux-dist 目录
        cd uClinux-dist

4. 修改 vmlinux-armv.lds.in 文件,
        vi linux-2.4.x/arch/armnommu/vmlinux-armv.lds.in
   在
 *(got)  /* Global Offset table */
 之后添加如下语句:
 romfs_data = .;
 romfs.o
 romfs_data_end = .;
   即修改为:
     65                 *(.got)                 /* Global offset table          */
     66
     67                 /* add by lumit - http://www.lumit.org */
     68                 romfs_data = .;
     69                 romfs.o
     70                 romfs_data_end = .;

5. 修改 vendors/Samsung/4510B/Makefile 文件,
        vi vendors/Samsung/4510B/Makefile
   在 image 目标的第三行,增加一条语句:
 arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
   如下为增加之后:
     63 image:
     64         [ -d $(IMAGEDIR) ] || mkdir -p $(IMAGEDIR)
     65         genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR)
     66         arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
     67         $(CROSS_COMPILE)objcopy -O binary --remove-section=.romvec /
     68                         --remove-section=.text --remove-section=.ramvec /
     69                         --remove-section=.init /
     70                         --remove-section=.bss --remove-section=.eram /
     71                         $(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/linux.data

6. make menuconfig
   在 Vendor/Product Selection  --->    中选择
 --- Select the Vendor you wish to target 
 (Samsung) Vendor
 --- Select the Product you wish to target
 (4510B) Samsung Products
                          
   在 Kernel/Library/Defaults Selection  --->   中选择
 (linux-2.4.x) Kernel Version                              
 (uClibc) Libc Version 

其他选项都不变,按照缺省设置,选择退出,保存配置。

7. make dep

8. make lib_only

9. make user_only
[说明] 编译login,boa程序时可能出现 undefined reference to 'crypt_old'的错误,
boa.elf2flt: In function `auth_check_userpass':
/tmp/liming/uClinux-dist/user/boa/src/auth.c:281: undefined reference to `crypt_old'
可以修改
config/.config
注释掉第25行的 CONFIG_USER_OLD_PASSWORDS
如下:
     24 CONFIG_USER_LOGIN_LOGIN=y
     25 # CONFIG_USER_OLD_PASSWORDS=y
     26 # CONFIG_USER_ONLY_ROOT is not set
然后再
cd user/boa/src/
rm *.o
重新编译 make user_only 一下这个目录里面的 obj 文件就可以了。

10. make romfs

11. make
arch/armnommu/mm/mm.o: In function `free_initmem':
/tmp/liming/uClinux-dist/linux-2.4.x/arch/armnommu/mm/init.c:240: undefined reference to `machine_is_ta7v'
这个错误只要注释该文件的相关代码即可。
    655 void free_initmem(void)
    656 {
    657         if (!machine_is_integrator() &&
    658             !machine_is_p52() &&
    659             !machine_is_cx821xx() &&
    660             !machine_is_atmel() &&
    661             !machine_is_netarm() &&
    662 //          !machine_is_ta7v() &&
    663             !machine_is_ta7s()) {
    664                 free_area((unsigned long)(&__init_begin),
    665                           (unsigned long)(&__init_end),
    666                           "init");

12. make image
此时得到 linux-2.4.x/linux 文件和 image.bin

Step 2:   通过 SkyEye 测试刚才编译得到的 linux-2.4.x/linux 内核是否可以运行。

Step 3:   如果 SkyEye 模拟器上测试通过了,那么就可以下载到 lumit4510 开发板试试了。

Step 4:   如果在 lumit4510 上可以运行 image.ram ,那么就可以添加自己的应用程序了。

基于ColdFire MCF5249与uClinux的嵌入式MP3播放器开发全解析 嵌入式系统开发的核心在于软硬件协同,尤其是在资源受限的微控制器上实现复杂功能。其基本原理是通过交叉编译工具链,在宿主机上为目标平台生成可执行代码,并利用操作系统的抽象管理硬件资源。在音频处理等实时性要求高的场景中,技术价值体现在如何通过硬件加速单元(如eMAC)和内存优化(如片上SRAM)来突破算力瓶颈。典型的应用场景包括网络音频播放器、IoT边缘音频设备等。本文以经典的**ColdFire MCF5249处理器**和**uClinux操作系统**为例,深入剖析了如何从零构建一个能通过网络播放MP3的嵌入式 阅读详情

相关推荐

嵌入式操作系统:uClinux

uClinux,全称为Micro-Controller Linux,它是一个适用于微控制器的Linux操作系统。与传统的Linux操作系统不同,uClinux通过移除对传统内存管理单元(MMU)的依赖,使其能够在没有MMU的嵌入式设备上运行。其中,uClinux是一种精简版的Linux操作系统,专为嵌入式系统设计而开发。2.1 无需MMU支持:uClinux是少数几个能够在没有MMU的处理器上运行的操作系统之一。2.2 精简和高效:uClinux专为嵌入式系统设计,具有精简的内核和最小化的内存占用。

DevCyberX的博客 1223

uCLinux核心手册中文版:嵌入式Linux指南

本文还有配套的精品资源,点击获取 简介:《uCLinux核心手册-中文》是针对Linux爱好者和开发者的指南,深入介绍了uCLinux操作系统的核心概念和技术,专为嵌入式系统设计。书中详细覆盖了uCLinux的起源、设计哲学、内核结构、构建过程、文件系统、设备驱动、网络支持、内存管理、进程管理、中断处理、设备控制、应用开发、电源管理以及案例研究和未来发展趋势。本书是开发者深...

weixin_35706067的博客 2930

uCLinux启动过程及编程实例

本文介绍了uCLinux的启动过程,并提供了一个简单的编程实例来展示如何在uCLinux上编写和运行应用程序。uCLinux提供了一个强大的平台,用于开发嵌入式系统和嵌入式设备。1.1 加电启动:当嵌入式设备上电时,CPU开始执行预定义的引导代码,该代码位于设备的固化存储器(如ROM或Flash)中。引导代码的任务是加载uCLinux内核映像到设备的内存中,并将控制权转交给内核。uCLinux一个针对嵌入式系统的Linux操作系统内核,它被设计用于资源受限的设备,如嵌入式系统和嵌入式开发板。

CyberXZ的博客 321

uclinux 嵌入式linux,嵌入式操作系统uCLinux

嵌入式操作系统是嵌入式系统的灵魂,而且在同一个硬件平台上可以嵌入不同的嵌入式操作系统。比如ARM7TDMI内核,可以嵌入Nucleus、VxWorks、uClinux等操作系统。在此主要对uClinux的进行介绍,嵌入式uClinux操作系统主要有三个基本部分组成:引导程序、uClinux内核(由内存管理、进程管理和中断处理等构成)和文件系统。uClinux可以通过定制使内核小型化,还可以加上GU...

weixin_39657662的博客 1137

如果在uClinux中让自己的应用程序在内核启动的时候自动运行

这是一个很老的话题了--不过网上还是很难找到一个完整的操作步骤,所以打算写一下送给象我一样的菜鸟. 仍然以已经编译成功的例子--hello(具体内容可以参阅前面的文章)来说明这个过程.也就是假设程序已经编译好了!(hello的编译过程可以参看http://www.itsn.cn/bbs/dispbbs.asp?boardID=2&ID=1&page=1中第7个问题)在网上搜索了一些相关内容,都提到

林大虫子的专栏 1517

how to compile uClinux kernel

 HTML Tags and JavaScript tutorialvar encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);

945

好玩:在vs2008下编译uclinux kernel

忙乎了几天,将uclinux kernel在vs2008下折腾了一道,从start_kernel一直到populate_rootfs,提取了内核中内存管理,设备管理和文件系统相关的代码,最后加载了rootfs.initramfs,基本能够证明移植的成功。做这个工作,其初衷是想借助vs2008的强大IDE,在移植过程中加深对文件系统的理解。但在移植成功后,发现了这个移植的更大的用途,它将使得在w

嵌云阁 1197

linux skyeye,用skyeye运行uClinux内核

用skyeye运行uClinux内核(2010-04-12 14:04:24)标签:it分类:嵌入式最近由于实验室项目的原因,要开始搞起嵌入式了,一直对这个都很感兴趣,只是以前总觉得自己与这行不太能扯上关系了,所以也没法单独抽时间出来研究这个。现在阴差阳错的做上了一个与嵌入式相关的项目,终于有机会来学学这些东西了,兴趣项目两不误,还是很不错的。由于是新手,以前从来没接触过嵌入式,所以研究起来还真是...

weixin_29297127的博客 247

uClinux-dist 使用教學:編譯 uClinux-dist 與常見問題

 uClinux-dist 使用教學:編譯 uClinux-dist 與常見問題編譯 uClinux-dist完成 kernel 與 filesystem 設定後,在命令模式執行編譯命令:# make dep # make進行 kernel 與應用程式的跨平臺編譯。在編譯之前,請檢查跨平臺編譯工具組(如GNU armtools)是否已安裝,同時在環境變數 PA

fengpan2004的专栏 1169

编译uclinux下的应用程序和内核模块

编译uclinux下的应用程序和内核模块   目        录 编译uclinux下的应用程序和内核模块... 1 目       录... 1 实验环境... 1 编译应用程序的正确方法... 2 编译运行Helloworld程序... 2 编译运行多文件Helloworld程序... 3 编译应用程序的方法摸索... 4 其他错误... 5 编

lurayvis的专栏 1968

Makefile:119: *** Error: UCLINUX_KERNEL seems to be pointed to wrong location, o

    Building MRUA时,运行第二步make时,出现如下错误:     [root@wang mrua_SMP8634_2.8.8.0_GCC4_dev.mips]# make Makefile:119: *** Error: UCLINUX_KERNEL seems to be pointed to wrong location, or kernel is not configu...

liuye066的专栏 288

一个uClinux中的Makefile文件的简单分析(ZT)

为了彻底搞清楚linux和uClinux的设备驱动,我觉得有必要找一份devices.txt的copy。那上面详细列出了0至255个linux主设备号的分配情况,以及各种设备的相应次设备号。对于,我自己开发非标准的linux设备非常有用。uClinux的设备和linux一样,因此这个文档同样适用于uClinux。这个文档可以从下列站点:http://www.lanana.org/docs/devi

我的仓库 My Storehouse 2359

移植Linux(ucLinux)到GBA的记录

移植Linux(ucLinux)到GBA的记录 v1.0 teawater@hotmail.com 1.感谢 向所有直接和间接帮助过我的的朋友们表示衷心的感谢,因为人数太多我就不一一提到了。 2.写在最前面 《移植uclinux到GBA的记录 v0.0》可以在下面的地址找到。 http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=e

CrazyBOY 8920
上一篇: 基于ARM-uCLinux嵌入式系统启动引导的实现
下一篇: VMWare里Linux的网络配置
TrueLie
博客等级 码龄24年 85粉丝 23原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值