记ubuntu的uClinux交叉编译环境的搭建以及操作系统的引导

合集下载

linux交叉编译环境搭建步骤

linux交叉编译环境搭建步骤

linux交叉编译环境搭建步骤在Linux系统下搭建交叉编译环境主要涉及以下几个步骤:2. 配置环境变量:将交叉编译工具链的路径添加到系统的环境变量中以便于使用。

可以在用户的`.bashrc`或`.bash_profile`文件中添加如下行:```bashexport PATH=<path_to_toolchain>/bin:$PATH```其中`<path_to_toolchain>`是指交叉编译工具链所在的路径。

3.设置目标平台的系统根目录:交叉编译时需要使用目标平台的系统库和头文件,因此需要设置目标平台的系统根目录。

可以通过以下方式设置:```bashexport SYSROOT=<path_to_sysroot>```其中`<path_to_sysroot>`是指目标平台的系统根目录。

4.编写一个简单的交叉编译项目:为了验证交叉编译环境是否搭建成功,可以编写一个简单的交叉编译项目进行测试。

例如,编写一个简单的C程序,将其交叉编译为ARM平台下的可执行文件。

```c#include <stdio.h>int maiprintf("Hello, world!\n");return 0;```将上述代码保存为`hello.c`文件。

然后,使用以下命令进行交叉编译:```basharm-linux-gnueabi-gcc -o hello hello.c```编译完成后,会生成一个名为`hello`的可执行文件。

在ARM平台上执行该可执行文件,将输出`Hello, world!`。

以上就是在Linux系统下搭建交叉编译环境的基本步骤。

根据具体的需求,可能还需要进行其他的配置和设置。

ubuntu10.04全过程创建交叉编译环境

ubuntu10.04全过程创建交叉编译环境

ubuntu10.04下建立交叉编译工具链(支持软浮点)全过程参考了网上的不少的资料,花了五个小时终于完成了,记录下全过程供大家分享。

用到的源码包如下,建议新手全部放在/home/usr/downloads/ 目录下。

以下操作在用户权限下进行。

=======================================================================arm-linux-gcc-3.4.1.tar.gzglibc-2.3.3.tar.gzlinux-2.6.8.tar.gzcrosstool-0.43.tar.gzbinutils-2.15.tar.gzglibc-linuxthreads-2.3.3.tar.gzbinutils-2.18.tar.gz --安装用编译一次至少要花半个小时,如果因为依赖软件没有安装中途会报错退出,只有从头再来,那样很浪费时间的。

sudo apt-get install bison flex build-essential patch libncurses5-dev由于ubuntu10.04自带的ld ,as版本太高的原因,需要安装binutils的2.18版本,然后替换系统中的2.20版本。

方法如下:$cd downloads$tar xzvf binutils-2.18.tar.gz$cd binutils-2.18$./configure --prefix=/tmp/binutils --disable-nls (-prefix后面的是生成可执行文件存放的位置可以自己定义)$make all$make install编译成功后在/tmp/binutils/bin/中就生成了ld和as程序的可执行文件重新链接/usr/bin/ld 和/usr/bin/as文件$sudo rm /usr/bin/ld /usr/bin/as //删除2.20的ld,as$sudo ln –s /tmp/binutils/bin/ld /usr/bin/$sudo ln –s /tmp/binutils/bin/as /usr/bin/然后可运行ld –v 和as –v 查看版本是否为2.18。

ubuntu下交叉编译环境构建(arm-linux-gcc-432_).

ubuntu下交叉编译环境构建(arm-linux-gcc-432_).

ubuntu下交叉编译环境构建(arm-linux-gcc-4.3.2 )及第一个linux下的c程序1.解压arm-linux-gcc-4.3.2.tgz#tar -jxvf arm-linux-gcc-4.3.2.tgz解压过程需要一段时间,解压后的文件形成了usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下# cd usr/local/#cp -rv arm /usr/local/现在交叉编译程序集都在/usr/local/arm/4.3.2/bin下面了2. 修改环境变量,把交叉编译器的路径加入到PATH。

修改/etc/bash.bashrc文件#vim /etc/bash.bashrc在最后加上:export PATH=$PATH:/usr/local/arm/4.3.2/binexport PATH(如果不能编辑,先修改相关文件的权限使用chmod命令。

)3.立即使新的环境变量生效,不用重启电脑:对应方法一:#source /root/.bashrc对应方法二:# source /etc/profile4.检查是否将路径加入到PATH:# echo $PATH显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。

至此,叉编译环境安装完成。

5. 测试是否安装成功:首先查看bin目录下可执行文件,或许不是arm-linux-gcc# /arm/4.3.2/bin/arm-none-linux-gnueabi-gcc-4.3.2 –v上面的命令会显示arm-linux-gcc信息和版本,gcc version 4.3.26 .编译Hello World程序,测试交叉工具链#include <stdio.h>int main(){printf("Hello World!\n");return 0;}执行下面的命令:# arm-linux-gcc -o hello hello.c源程序有错误的话会有提示,没有任何提示的话,就是通过了,就可以下载到ARM目标板上运行了!接着可以输入file hello的命令,查看生成的hello文件的类型,要注意的是生成的可执行文件只能在ARM体系下运行,不能在其于X86的PC机上运行。

ubuntu10.10下建立交叉编译环境

ubuntu10.10下建立交叉编译环境

1. 安装标准的C开发环境,由于Ubuntu 9.04 Linux安装默认是不安装的,所以需要先安装一下(如果已经安装好的话,就可以免去这一步了):$ sudo apt-get install gcc g++ libgcc1 libg++ make gdb如果上面这个安装不行,可以试试$ sudo apt-get install build-essential2. 下载arm-linux-gcc-4.3.2.tgz到任意的目录下,进入这个文件夹$ sudo tar xvzf arm-linux-gcc-4.3.2.tgz –C /注意:C 后面有个空格,并且 C 是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思。

执行该命令,将把 arm-linux-gcc 安装到/usr/loca/arm/4.3.2 目录。

3. 修改环境变量,把交叉编译器的路径加入到PATH。

方法一:修改/etc/bash.bashrc文件(此文件只对当前用户适用)$sudo gedit /etc/bash.bashrc在最后加上export PATH=$PATH:/usr/local/arm/4.3.2/bin方法二:修改/etc/profile文件(此文件属于系统级别的环境变量,设置在里面的东西对所有用户适用):$sudo gedit /etc/profile增加路径设置,在末尾添加如下,保存/etc/profile文件:export PATH=$PATH:/usr/local/arm/4.3.2/bin方法三:修改/etc/environment文件$sudo gedit /etc/environment原文件应为PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: /usr/games“将其改为PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin"保存退出即可4. 立即使新的环境变量生效,不用重启电脑:对应方法一:$ source /root/.bashrc对应方法二:$ source /etc/profile方法三立即生效5. 检查是否将路径加入到PATH: $ echo $PATH显示内容/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr /games:/usr/local/arm/4.3.2/bin 说明已经将交叉编译器的路径加入PATH。

Ubuntu18.04安装arm-linux-gcc交叉编译器的两种方法(附下载地址)

Ubuntu18.04安装arm-linux-gcc交叉编译器的两种方法(附下载地址)

Ubuntu18.04安装arm-linux-gcc交叉编译器的两种⽅法(附下载地址)⽅法⼀: 我们都知道Ubuntu有⼀个专门⽤来安装软件的⼯具apt,我们可以⽤它来全⾃动安装arm-linux-gcc。

此⽅法安装的是最新版的,但是此⽅法需要FQ,否则99%会失败,这就是为什么⽹上⼤多都⽤压缩包安装的原因: ⾸先Ctrl+Alt+T弹出终端,使⽤如下命令进⾏arm-linux-gcc的安装:sudo apt-get install gcc-arm-linux-gnueabihf 使⽤如下命令进⾏arm-linux-g++的安装:sudo apt-get install g++-arm-linux-gnueabihf 如果要卸载时使⽤如下命令进⾏移除,arm-linux-gcc的卸载:sudo apt-get remove gcc-arm-linux-gnueabihf arm-linux-g++的卸载:sudo apt-get remove g++-arm-linux-gnueabihfsudo tar -xjvf /tmp/arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 3.解压完成后,再在(/usr/local)中创建⼀个新⽬录arm,即在Terminal中输⼊以下命令:sudo mkdir /usr/local/arm 4.创建arm⽬录成功后,还需要给它解放全部权限,即在Terminal中输⼊以下命令:sudo chmod 777 /usr/local/arm 5.在解压出来的⽬录中找到并把整个arm-linux-gcc-3.4.5-glibc-2.3.6⽬录复制到刚刚建好的arm⽬录中,命令如下:sudo cp -r gcc-3.4.5-glibc-2.3.6 /usr/local/arm 6.打开(/etc/profile)配置环境变量和库变量,⽬的是以后可以在任何位置使⽤该交叉编译器,命令如下:sudo vi /etc/profile 7.⽤vi或者vim打开后,在⽂件最后添加两⾏,并输⼊以下代码:第⼀⾏是添加执⾏程序的环境变量,第⼆⾏是库⽂件的路径export PATH=$PATH:/usr/local/arm/gcc-3.4.5-glibc-2.3.6/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/gcc-3.4.5-glibc-2.3.6/lib 8.使⽤source命令重新加载⽣效该配置⽂件source /etc/profile 9.检验是否安装成功,在 Terminal 输⼊以下命令输出版本信息:arm-linux-gcc -v 10.若有以下报错参考解决办法: 报错:bash: /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-gcc-4.2.2: No such file or directory 解决sudo apt-get install libc6-i386 该库中包括ia32-libs, lib32z1, lib32ncurses5等等依赖。

记ubuntu的uClinux交叉编译环境的搭建以及操作系统的引导

记ubuntu的uClinux交叉编译环境的搭建以及操作系统的引导

添加如图所示的代码。
最后,需要这两个程序自动启动的话还需要修改 “~/uClinux-dist/Vendors/Samsung/4510B/"下的 rc 文件,向其最后添加 “./bin/led& ./bin/uart&" 两行代码。 完成这些以后,我们就可以开始编译了
在“Target Platform Selection"中选择“Customize Kernel Settings (NEW)“和”Customize Vendor/User Settings (NEW)“
#define UTXBUF1 (* (volatile unsigned *) 0x03ffe00c) \\定义 UART1 发送缓存寄存器
#define URXBUF1 (* (volatile unsigned *) 0x03ffe010) \\定义 UART1 接收缓存寄存器
#define UBRDIV1 (* (volatile unsigned *) 0x03ffe014) \\定义 UART1 波特率分频寄存
void InitUART(int Port,int Baudrate) \\串口初始化函数体 { if(Port==0) { ULCON0=0x03; UCON0=0x09; UBRDIV0=Baudrate; } if(Port==1) { ULCON1=0x03; UCON1=0x09; UBRDIV1=Baudrate; } }
这次我选择了用 Ubuntu 这个版本的 linux 作为我的开发环境,是因为它的界面还算友好, 对于我这种 linux 白痴一样的人能少用一点命令那是再好不过了的。可是我没有想到 Ubuntu 可以这样的坑爹,由于用的 shell 和别个的 linux 不同,所以直接导致 arm-elf-tools-20030314.sh 不能打开,所以更别说安装了。Google 了很久,终于不得不去 面对了一个现实,就是我偷懒不想用命令,结果我得用更多的命令去安装这个该死的工具。

linux学习之交叉编译环境

linux学习之交叉编译环境

linux学习之交叉编译环境⼀在Linux上配置交叉编译环境:1. 根据芯⽚型号确定芯⽚指令集架构,并根据该架构选择合适的交叉编译⼯具2. 将交叉编译⼯具解压,添加到环境变量。

3. 编译⽬标⽂件,并想法设法将⽬标⽂件整到开发板上,有以下⽅法:将⽬标⽂件先整到windows PC下,拷贝到U盘/SD卡然后再插⼊开发板;⽤⽀持SSH的⼯具如putty登陆板⼦linux服务器;⽤NFS实现。

⼆ Uboot:⽤来启动内核(CPU不能直接从块设备中执⾏代码): 执⾏uboot代码,在uboot中把块设备中的内核代码复制到某内存地址处,然后再执⾏这个地址,即可启动内核。

uboot代码(uboot 根⽬录的spl⽂件夹u-boot-spl.bin和uboot根⽬录下u-boot.bin)需要⽤make(makefile配置+“.config”(make menuconfig图形化配置⼯具的输出⽂件))出来。

然后分别烧录进板⼦。

三编译kernel,并将其烧写进板⼦,启动板⼦后linux的shell环境应该跑起来了。

注意烧录内核的位置和内核运⾏环境: ramdisk根⽂件系统,这个⽂件系统是存在RAM⾥的,所以你在⾥⾯写⼊东西,⼀断电就没有了。

NAND Yaffs2⽂件系统:断电后还是存在的,使⽤busybox⽤来⽣成linux⽂件系统的⼏个基本⽂件夹,然后通过打包⼯具mkyaffs2,它⽤来⽣成能直接烧录到板⼦⾥的镜像⽂件,以下都是要烧写的⽂件。

Image Name Image Type Image start offsetu-boot-spl.bin uboot0x200u-boot.bin data 0x100000env.txt env0x80000970uImage data0x200000rootfs_yaffs2.img data 0x2000000四:将⾃⼰编写的程序的可执⾏⽂件拷贝到/opt⽬录下,并拷贝所需的库⽂件到/lib下,即可通过命令⾏来运⾏⽂件了。

交叉编译环境的配置与使用

交叉编译环境的配置与使用

交叉编译环境的配置与使用交叉编译是指在一个不同的开发环境中编译程序,以在目标平台上运行。

目标平台可以是不同的硬件架构、操作系统或操作系统版本。

交叉编译可以有效地减少在目标平台上进行开发和测试的时间,尤其是在限制了资源的嵌入式系统中。

配置交叉编译环境的步骤主要包括以下几个方面:1. 选择交叉编译工具链:交叉编译工具链是包含了交叉编译器、交叉链接器和相关工具的集合。

根据目标平台的特点,可以选择使用已有的工具链,或者自己构建定制的交叉编译工具链。

常见的交叉编译工具链有Cygwin、GCC等。

3.配置交叉编译环境:在配置交叉编译环境之前,首先需要确定目标平台和目标操作系统的相关信息,例如:处理器架构、操作系统版本、库文件位置等。

然后设置环境变量,包括设置交叉编译工具链的路径、目标平台和操作系统的相关信息。

4. 编写和编译代码:在配置好交叉编译环境后,可以使用常规的编程工具,如IDE或命令行工具,编写程序代码。

在编译时,需要使用交叉编译工具链中的编译器和相关工具来进行编译。

例如,使用交叉编译工具链中的gcc来代替本机的gcc进行编译。

5.链接和生成目标文件:编译成功后,会生成目标文件,即在目标平台上可以运行的可执行文件或库文件。

在链接时,需要使用交叉链接器来链接目标文件和相关库文件。

6.在目标平台上运行:将生成的目标文件复制到目标平台上,并通过目标平台的方式运行。

例如,在嵌入式系统中,可以通过串口或其他方式加载程序并运行。

1.确定目标平台和操作系统的要求:在进行交叉编译之前,需要确保了解目标平台和操作系统的相关要求,例如处理器架构、操作系统版本、库文件位置等。

这些信息将有助于选择合适的交叉编译工具链和配置交叉编译环境。

2.编写适用于目标平台的代码:在进行交叉编译时,需要注意编写适用于目标平台的代码。

例如,需要避免使用与目标平台不兼容的库函数和系统调用,以及考虑目标平台的资源限制等。

3.调试和测试:由于交叉编译环境和目标平台的不同,可能会遇到一些问题,如编译错误、链接错误或运行错误等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void Delay(unsigned int x) { unsigned int i,j,k;
for(i=0;i<=x;i++) for(j=0;j<0xff;j++) for(k=0;k<0xff;k++); } 将这两个文件放到“~/uClinux-dist/user”下新建的文件夹“new_ap”中,接下来就是为 这两个文件建立 Makefile
Delay(10000); \\即 00000100B,16 进制为 0x04
IOPDATA=0x02;
Delay(10000);
IOPDATA=0x04;
Delay(10000);
IOPDATA=0x08;
Delay(10000);
}
return 0;
}
第二个程序 串口通信
#define IOPMOD (* (volatile unsigned *) 0x03ff5000)
#define UTXBUF1 (* (volatile unsigned *) 0x03ffe00c) \\定义 UART1 发送缓存寄存器
#define URXBUF1 (* (volatile unsigned *) 0x03ffe010) \\定义 UART1 接收缓存寄存器
#define UBRDIV1 (* (volatile unsigned *) 0x03ffe014) \\定义 UART1 波特率分频寄存
#define ULCON0 (* (volatile unsigned *) 0x03ffd000) \\定义 UART0 线控制寄存器地址
#define UCON0 (* (volatile unsigned *) 0x03ffd004) \\定义 UART0 控制寄存器地址
#define USTAT0 (* (volatile unsigned *) 0x03ffd008) \\定义 UART0 状态寄存器
**要注意到 all、romfs、clean 等后面是具体 GCC 命令,必须换行后 Tab 一下才能识别,这 是语法问题! 下一步建立 user 文件夹下的 Makefile
添加如标注的两行,这样就能告诉编译器我们需要编译的东东
下面我们需要让“make menuconfig”能够显示出我们的程序来就还需要设置 "~/Uclinux-dist/config"目录下的“config.in”文件
在开始我们的烧写工作之前,需要先处理一件很重要的事情,这个就是我们的 Boot Loader, 这是启动系统的关键。
在 ADS 中编写 Boot Loader 程序。
;**************************Boot Loader By Leo 2011 All Rights Reserved**************************************
保存,退出
一步步执行,直到在“Main Menu“中选上我们的“Test Program“
这样我们就设置结束了,保存退出,分别执行"make dep"、"make clean"、"make lib_only"、 "make user_only"、"make_romfs"、"make image"生成我们的 rom 文件,值得注意的是有时 在"make image"时会出错,这个时候需要用"make linux"命令重新编译 linux 内核即可。
记 ubuntu 的 uClinux 交叉编译环境的搭建以及操作系统的引导
1、uClinux 交叉编译环境的搭建
从 下载好的文件有 arm-elf-tools-20030314.sh 和 uClinux-dist.tar.gz, 其中前者是编译工具,后者是 uClinux 的内核源码,我们就是利用这个工具编译裁剪好了的 系统。
终于让我找到了最好的解决方法,就是用 vi 修改这个文件的文件头。
我是把 arm-elf-tools-20030314.sh 放在 root 里面的,所以命令如下
sudo su
cd ~/
vi arm-elf-tools-20030314.sh
将这个文件的第 38 行改成这个样子
然后重启系统之后,就可以用 root 登录终端./arm-elf-tools-20030314.sh 命令安装了(具 体 vi 命令请参见网络上的说明)

#define ULCON1 (* (volatile unsigned *) 0x03ffe000) \\定义 UART1 线控制寄存器地址
#define UCON1 (* (volatile unsigned *) 0x03ffe004) \\定义 UART1 控制寄存器地址
#define USTAT1 (* (volatile unsigned *) 0x03ffe008) \\定义 UART1 状态寄存器
IOPMOD EQU 0x3FF5000 IOPCON EQU 0x3FF5004 IOPDATA EQU 0x3FF5008 CODE32 AREA Init,CODE,READONLY ENTRY B RESET NOP NOP NOP NOP NOP NOP NOP RESET
;*************************************************** ;MASK ALL INTERRUPTS ;***************************************************
#define UTXBUF0 (* (volatile unsigned *) 0x03ffd00c) \\定义 UART0 发送缓存寄存器
#define URXBUF0 (* (volatile unsigned *) 0x03ffd010) \\定义 UART0 接收缓存寄存器
#define UBRDIV0 (* (volatile unsigned *) 0x03ffd014) \\定义 UART0 波特率分频寄存
第一个程序------跑马灯
#define IOPMOD (*(volatile unsigned *) 0x03ff5000) \\定义 IO 工作方式寄存器端口地 址 #define IOPDATA (*(volatile unsigned *) 0x03ff5008) \\定义 IO 数据寄存器地址
rSYSCFG EQU 0xE7FFFF90 ;各寄存器的待设数值 rEXTDBWTH EQU 0x00003002 rREFEXTCON EQU 0xCE338360
rfROMCON0 EQU 0x02000060 rfSDRAMCON0 EQU 0x14010380 rsROMCON0 EQU 0x14048060 rsSDRAMCON0 EQU 0x10000380 rROMCON1 EQU 0x0 rROMCON2 EQU 0x0 rROMCON3 EQU 0x0 rROMCON4 EQU 0x0 rROMCON5 EQU 0x0 rSDRAMCON1 EQU 0x0 rSDRAMCON2 EQU 0x0 rSDRAMCON3 EQU 0x0
LDR R1,=SYSCFG LDR R0,=rSYSCFG STR R0,[R1]
LDR R1,=EXTDBWTH LDR R0,=rEXTDBWTH STR R0,[R1]
LDR r0,=ROMCON0
LDR r1,=rfROMCON0
LDR r2,=rROMCON1 LDR r3,=rROMCON2 LDR r4,=rROMCON3 LDR r5,=rROMCON4 LDR r6,=rROMCON5 LDR r7,=rfSDRAMCON0 LDR r8,=rSDRAMCON1 LDR r9,=rSDRAMCON2 LDR r10,=rSDRAMCON3 LDR r11,=rREFEXTCON STMIA r0,{r1-r11}
这个很坑爹的工具安装好了以后,就可以解压 uClinux-dist.tar.gz,解压在主文件夹是个 不错的选择,root 里面要向外复制的话文件权限 不好解决。
解压好了 uClinux-dist.tar.gz 之后,就可以先在目录下 make menuconfig 看一看内核设置 之类的东东了
当然,现在只是一个开始,还是得添加自己的一些程序到系统里,所以先退出,编写下要用 到的东西
添加如图所示的代码。
最后,需要这两个程序自动启动的话还需要修改 “~/uClinux-dist/Vendors/Samsung/4510B/"下的 rc 文件,向其最后添加 “./bin/led& ./bin/uart&" 两行代码。 完成这些以后,我们就可以开始编译了
在“Target Platform Selection"中选择“Customize Kernel Settings (NEW)“和”Customize Vendor/User Settings (NEW)“
void InitUART(int Port,int Baudrate) \\串口初始化函数体 { if(Port==0) { ULCON0=0x03; UCON0=0x09; UBRDIV0=Baudrate; } if(Port==1) { ULCON1=0x03; UCON1=0x09; UBRDIV1=Baudrate; } }
\\定义 IO 工作方式寄存
器地址
#define IOPCON (* (volatile unsigned *) 0x03ff5004)
\\定义 IO 控制寄存器
地址
#define IOPDATA (* (volatile unsigned *) 0x03ff5008)
相关文档
最新文档