EasyARM-iMX283A的Linux 开发环境构建
- Vim的安装
sudo apt-get install vim
等待安装完成后我们来配置简单配置vim的配置文件
vim /etc/vim/vimrc
(备注:自己一个人使用的^-^)
在原来的基础上添加保存退出
" 在窗口标题栏显示文件名称
set title
" 编辑的时候将所有的 tab 设置为空格
set tabstop=
"设置自动对齐空格数
set shiftwidth=
"显示行号
set number
"搜索时高亮显示
set hlsearch
"不区分大小写
set ignorecase
"语法高亮
syntax on
- 安装交叉编译器 gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2
sudo tar xjvf gcc-4.4.-glibc-2.11.-multilib-.0_EasyARM-iMX283.tar.bz2 -C /opt/
还需将该路径添加到 PATH环境变量中,其方法为:修改“/etc/profile”文件,具体操作方法如下
sudo vim /etc/profile
用 vim 编辑器打开“/etc/profile”文件后,在文件末尾增加如下一行内容:
export PATH=$PATH:/opt/gcc-4.4.-glibc-2.11.-multilib-1.0/arm-fsl-linux-gnueabi/bin/
文件修改并保存后,再在终端中输入如下指令,更新环境变量,使设置生效
source /etc/profile
备注也可以在~/.bashrc里面。或者在~/.bashrc里面加一句source /etc/profile
兼容32位库(不同系统版本的指令有差异的)
sudo apt-get install ia32-libs
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
测试一下:
1、打印PATH信息
2、在终端输入arm-fsl-linux-gnueabi-并按TAB键,如果能够看到很多arm-fsl-linux -gnueabi-前缀的命令
3、查看arm-fsl-linux-gnueabi-gcc版本信息
lin@lin-machine:~$ vim /etc/profile
lin@lin-machine:~$
lin@lin-machine:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/gcc-4.4.-glibc-2.11.-multilib-1.0/arm-fsl-linux-gnueabi/bin/
lin@lin-machine:~$ arm-fsl-linux-gnueabi-
arm-fsl-linux-gnueabi-addr2line arm-fsl-linux-gnueabi-gprof
arm-fsl-linux-gnueabi-ar arm-fsl-linux-gnueabi-ld
arm-fsl-linux-gnueabi-as arm-fsl-linux-gnueabi-ldd
arm-fsl-linux-gnueabi-c++ arm-fsl-linux-gnueabi-nm
arm-fsl-linux-gnueabi-cc arm-fsl-linux-gnueabi-objcopy
arm-fsl-linux-gnueabi-c++filt arm-fsl-linux-gnueabi-objdump
arm-fsl-linux-gnueabi-cpp arm-fsl-linux-gnueabi-populate
arm-fsl-linux-gnueabi-ct-ng.config arm-fsl-linux-gnueabi-ranlib
arm-fsl-linux-gnueabi-g++ arm-fsl-linux-gnueabi-readelf
arm-fsl-linux-gnueabi-gcc arm-fsl-linux-gnueabi-run
arm-fsl-linux-gnueabi-gcc-4.4. arm-fsl-linux-gnueabi-size
arm-fsl-linux-gnueabi-gccbug arm-fsl-linux-gnueabi-strings
arm-fsl-linux-gnueabi-gcov arm-fsl-linux-gnueabi-strip
arm-fsl-linux-gnueabi-gdb
lin@lin-machine:~$ arm-fsl-linux-gnueabi-gcc -v
Using built-in specs.
Target: arm-fsl-linux-gnueabi
Configured with: /work/arm-toolchains/tmp/src/gcc-4.4./configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-fsl-linux-gnueabi --prefix=/work/arm_fsl_gcc_4..4_multilib --with-sysroot=/work/arm_fsl_gcc_4..4_multilib/arm-fsl-linux-gnueabi/multi-libs --enable-languages=c,c++ --with-pkgversion=4.4.4_09.06.2010 --enable-__cxa_atexit --disable-libmudflap --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-gmp=/work/arm-toolchains/tmp/arm-fsl-linux-gnueabi/build/static --with-mpfr=/work/arm-toolchains/tmp/arm-fsl-linux-gnueabi/build/static --with-ppl=/work/arm-toolchains/tmp/arm-fsl-linux-gnueabi/build/static --with-cloog=/work/arm-toolchains/tmp/arm-fsl-linux-gnueabi/build/static --enable-threads=posix --enable-target-optspace --with-local-prefix=/work/arm_fsl_gcc_4..4_multilib/arm-fsl-linux-gnueabi/multi-libs --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long --enable-multilib --with-system-zlib --enable-lto
Thread model: posix
gcc version 4.4. (4.4.4_09.06.2010)
来测一个文件的编译
vim hello.c
代码内容如下
#include <stdio.h>
int main(void)
{
int i;
for (i=; i<; i++) {
printf("Hello %d!\n", i);
}
return ;
}
保存退出
查看当前的文件
lin@lin-machine:~$ ls
bootloader Documents Music Templates
bootloader-v1..tar.bz2 Downloads Pictures Videos
Desktop examples.desktop Public vmware-tools-distrib
lin@lin-machine:~$ vim hello.c
lin@lin-machine:~$ ls
bootloader Downloads Pictures vmware-tools-distrib
bootloader-v1..tar.bz2 examples.desktop Public
Desktop hello.c Templates
Documents Music Videos
编译
lin@lin-machine:~$ arm-fsl-linux-gnueabi-gcc hello.c -o hello
再使用ls查看一下
lin@lin-machine:~$ ls
bootloader Downloads Music Videos
bootloader-v1..tar.bz2 examples.desktop Pictures vmware-tools-distrib
Desktop hello Public
Documents hello.c Templates
使用file来查看hello文件
lin@lin-machine:~$ file hello
hello: ELF -bit LSB executable, ARM, EABI5 version (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6., not stripped
- 编译 U-Boot
先解压当前文件bootloader-v1.13.tar.bz2
tar -jxvf bootloader-v1..tar.bz2
解压完成后
cd bootloader/
我们cd elftosb/
在elftosb文件夹中添加elftosb_install.sh
其具体代码如下
echo " menu, please select your choice:"
echo " 1 检测系统是多少位,自动安装"
echo " 2 系统为32位选择elftosb_32bit"
echo " 3 系统为64位选择elftosb_64bit"
echo " q exit" i686fun() {
echo "系统为32位选择elftosb_32bit"
echo "/////////////////////////////"
cp elftosb_32bit elftosb
sudo cp elftosb /usr/bin/
sudo chmod /usr/bin/elftosb
sudo ls /usr/bin/ -li |grep elftosb
echo "/////////////////////////////"
} x86_64fun() {
echo "系统为64位选择elftosb_64bit"
echo "/////////////////////////////"
cp elftosb_64bit elftosb
sudo cp elftosb /usr/bin/
sudo chmod /usr/bin/elftosb
sudo ls /usr/bin/ -li |grep elftosb
echo "/////////////////////////////"
} autofun() { echo "如何查看自己运行ubuntu是32位还是64位"
echo "如果显示i686,你安装了32位操作系统"
echo "如果显示 x86_64,你安装了64位操作系统"
uname --m unameOut="$(uname --m)"
case "${unameOut}" in
i686*) i686fun;;
x86_64*) x86_64fun;;
*) echo "UNKNOWN:${unameOut}"
esac
} read sel
echo "select $sel" case $sel in
[]) autofun;;
[]) i686fun;;
[]) x86_64fun;;
[q]) exit ;;
*) echo "ONLY accept 1/2/3/q/Q"
esac
该脚本主要作用:是进行 u-boot 转换前需要先将 elftosb 目录下的“elftosb_32bit 或 elftosb_64bit”文件为原型复制一个为“elftosb”并复制到“/usr/bin/”目录下(请以用户搭建的 Linux 上位机系统位宽为准)。复制完后需要给 elftosb 赋予可执行的权限。
修改改脚本的权限
lin@lin-machine:~/bootloader/elftosb$ chmod elftosb_install.sh
lin@lin-machine:~/bootloader/elftosb$ ls -li | grep elftosb_install.sh
-rwxrwxrwx lin lin 12月 : elftosb_install.sh
执行一下该脚本
lin@lin-machine:~/bootloader/elftosb$ ./elftosb_install.sh
menu, please select your choice:
检测系统是多少位,自动安装
系统为32位选择elftosb_32bit
系统为64位选择elftosb_64bit
q exit select
如何查看自己运行ubuntu是32位还是64位
如果显示i686,你安装了32位操作系统
如果显示 x86_64,你安装了64位操作系统
x86_64
系统为64位选择elftosb_64bit
/////////////////////////////
[sudo] password for lin:
-rwxrwxrwx root root 12月 : elftosb
/////////////////////////////
我们现在cd u-boot-2009.08/后执行./build-uboot
lin@lin-machine:~/bootloader$ cd u-boot-2009.08/
lin@lin-machine:~/bootloader/u-boot-2009.08$ ls
\ config.mk examples lib_generic lib_ppc mkuboot.sh sbtool
api COPYING fs lib_i386 lib_sh nand_spl si
board cpu include lib_m68k lib_sparc net tools
build-uboot CREDITS lib_arm lib_microblaze MAINTAINERS onenand_ipl u-boot.lds
CHANGELOG disk lib_avr32 lib_mips MAKEALL post u-boot.map
CHANGELOG-before-U-Boot-1.1. doc lib_blackfin lib_nios Makefile README uboot_wdg.patch
common drivers libfdt lib_nios2 mkconfig rules.mk
lin@lin-machine:~/bootloader/u-boot-2009.08$ ./build-uboot
U-Boot build menu, please select your choice:
1 make distclean
2 config for mx28
3 build U-Boot
q exit
【备注】红色部分为脚本执行时的选择菜单。当出现该菜单时,输入对应的数字并按回车键即可。其中“build U-Boot”选项已经包含了将 u-boot 复制到 imx-bootlets-src-10.12.01 工程进行编译的操作,最终的编译结果位于 imx-bootlets-src-10.12.01 工程目录下。
我们来查看一下/imx-bootlets-src-10.12.01/有那些文件。
lin@lin-machine:~/bootloader/u-boot-2009.08$ cd ../imx-bootlets-src-10.12./
lin@lin-machine:~/bootloader/imx-bootlets-src-10.12.$ ls
boot_prep imx28_ivt_linux.sb initramfs.cpio.gz mach-mx23 si uImage
build imx28_ivt_uboot.sb linux.bd mach-mx28 u-boot updater.bd
build_updater imx28_linux.sb linux_ivt.bd Makefile uboot.bd updater_ivt.bd
elftosb imx28_uboot.sb linux_prep power_prep uboot_ivt.bd zImage
补充一下
制作 imx28_ivt_linux.sb 固件首先需求制作出来 zImage 文件,其来自下面的路径的
lin@lin-machine:~/linux-2.6.35.3/arch/arm/boot$ ls
bootp compressed Image install.sh Makefile uImage zImage
现在介绍一下如何生产这个 zImage文件。
现在我们先删除原来zImage
回到~/linux-2.6.35.3
设置内核对应的型号
输入“make zImage”命令进行编译
现在我们看编译完成后将在 arch/arm/boot/目录下生成 是否生产新的zImage 文件
将zimage复制到 ~/bootloader/imx-bootlets-src-10.12.01
cp arch/arm/boot/zImage ../bootloader/imx-bootlets-src-10.12.01
如果出现
安装mkimage使用指令
sudo apt-get install u-boot-tools
或者将~/bootloader/u-boot-2009.08/tools/mkimage 复制到/usr/bin/mkimage
lin@lin-machine: ~/bootloader/u-boot-2009.08/tools$ sudo cp mkimage /usr/bin/
我们编译内核
在“linux-2.6.35.3”目录下执行“make uImage”命令即可编译。编译完成后将在“arch/arm/boot”目录下生成内核固件 uImage。
同样我们将uImage复制到 ~/bootloader/imx-bootlets-src-10.12.01
cp arch/arm/boot/uImage ../bootloader/imx-bootlets-src-10.12.01
如果使用 USB 方式烧写到 EasyARM-iMX283 的 NAND Flash 时,请把该固件文件替换到 MtgTool 程序的“Profiles\MX28 Linux Update\OS Firmware\files”目录
【注意】
Linux 内核启动时,是需要传入启动参数的;Linux 内核是由 U-Boot 引导启动时,启动参数是由 U-Boot 传递的。但是若系统直接从 Linux 内核启动,启动参数是由谁的传递呢?其实 imx28_ivt_linux.sb 固件中不单包含了 Linux内核代码,还包含了一段引导代码。当系统从 imx28_ivt_linux.sb 固件启动时,是先执行这一段引导代码。这段引导代码任务包含了初始化电源和一部分硬件设备,以及给即将启动的 Linux内核传递启动参数。
那么启动参数用户如何来自定义呢?
在 imx-bootlets-src-10.12.01 目录下 linux_prep/cmdlines/iMX28_EVK.txt文件内容如下:
gpmi=g console=ttyAM0,115200n8 console=tty0 ubi.mtd=5 root=ubi0:rootfs rootfstype=ubifs fec_mac= ethact
linux_prep/board/iMX28_EVK.c文件的 cmdline_def变量(在该文件的最后一行)的值为:
char cmdline_def[] = "gpmi=g console=ttyAM0,115200n8 ubi.mtd=5 root=ubi0:rootfs rootfstype=ubifs fec_mac=ethact";
当用户需要修改 imx28_ivt_linux.sb 的启动参数时,这两个地方也要修改。
当用户需要修改 imx28_ivt_linux.sb 的启动参数时,这两个地方均要修改,而且内容要保持一致。
注意:固件由于更新,可能导致参数可能会不同,如果ubi.mtd 的值不为 5,请修改为 5,文件系统分区是位于 mtd5 分区,这样才能正常启动文件系统。
EasyARM-iMX283A的Linux 开发环境构建的更多相关文章
- 嵌入式linux开发环境构建
2.1硬件环境构建 2.1.1主机与目标板结合的交叉开发模式 在主机上编辑.编译软件,然后再目标办上运行.验证程序. 对于S3C2440.S3C2410开发板,进行嵌入式Linux开发时一般可以分为以 ...
- 20145213《信息安全系统设计基础》实验一 Linux开发环境的配置
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号:20145213 20145222 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...
- 用Windows+VirtualBox搭建嵌入式Linux开发环境
Windows+VirtualBox的嵌入式Linux开发环境的搭建 最近一直在学习Linux的设备驱动编写,一直是在物理机上安装的Ubuntu进行的,但是在Ubuntu12.04的系统中,已经不能用 ...
- 信息安全系统设计基础实验一:Linux开发环境的配置和使用
北京电子科技学院(BESTI) 实验报告 课程:信息安全系统设计基础 班级:1353 姓名:芦畅 傅冬菁 学号:20135308 20135311 成绩: 指导教师:娄家鹏 ...
- 熟悉linux开发环境(实验)
北京电子科技学院(BESTI) 实验报告 课程: 深入理解计算机系统 班级: 1353班 姓名:张若嘉 杨舒雯 学号:20135330 20135324 成绩: 指导教师:娄嘉鹏 实验日期:2015. ...
- 一步步学习Linux开发环境搭建与使用
00.Linux开发环境搭建与使用1--Linux简史 01.Linux开发环境搭建与使用2--Linux系统(ubuntu)安装方案 02.Linux开发环境搭建与使用3--通过虚拟机安装系统(ub ...
- Linux开发环境的搭建和使用——Linux本必备软件SSH
SSH 至 Secure Shell 缩写.由 IETF 网络工作组(Network Working Group)开发:SSH 以建立应用层和传输层安全协议中的基础上. SSH 是眼下较可靠,专为远程 ...
- 利用 WSL 在 Windows下打造高效的 Linux 开发环境
WSL-Windows Subsystem for Linux 介绍 The Windows Subsystem for Linux lets developers run Linux environ ...
- Django Python MySQL Linux 开发环境搭建
Django Python MySQL Linux 开发环境搭建 1.安装Python 进行Python开发,首先必须安装python,对于linux 或者Mac 用户,python已经预装. 在命令 ...
随机推荐
- 【git】之常用命令
再使用git过程常用的命令在6-10左右,但是如果你想精通git那么需要记住的命令在80左右, 下面看这张图,我们了解一下git的概念的常用操作! Workspace:工作区(例如eclipse的工作 ...
- Java HashMap的死循环 以及 LRUCache的正确实现
今天RP爆发,16核服务器load飙到30多,cpu使用情况全部99%以上. 从jstack中分析发现全部线程都堵在map.transfer处,如下: "pool-10-thread-23& ...
- vc++获取网页源码之使用import+智能指针包装类
创建基于对话框的mfc应用程序 使用智能指针包装类IWinHttpRequestptr,它内部采用的是引用计数来管理对象的生命周期 代码: #import "C:\\Windows\\Sys ...
- PAT 乙级 1046 划拳(15) C++版
1046. 划拳(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 划拳是古老中国酒文化的一个有趣的组成部分 ...
- 显示定位方法,提取中间text 封装成函数的方法
tager='工作台' element=WebDriverWait(self.dr,15,0.1).until( eval("lambda x: x."+'find_element ...
- 学习笔记之WinSCP
WinSCP :: Official Site :: Free SFTP and FTP client for Windows https://winscp.net/eng/index.php Win ...
- jquery load()函数和window.onload事件
我想用jquery load()一个饼状图页面, 但是load不出来 代码如下: 后来百度了一下,解决办法如下: window.onload事件只有在文档载入的时候才会执行的,你载入子页面不会触发这个 ...
- jQuery的html和css
jQuery每次返回的都是当前的集合对象: 每个方法用的时候都会把他的元素对象返回,他每次返回的都是最近的那个元素: 1.addclass() 备选元素添加一个类名 2.removeclass() 移 ...
- Blob下载文件 & 模拟滚动条实现
1.vue切换路由视图时,事件钩子顺序是 当前模块create-->上一个模块beforeDestroy-->当前模块mounted 因此注册全局事件(比如给window注册事件)应放在m ...
- 阿里云ECS搭建FTP服务器
一.开始前先开通21端口权限; 二.添加IIS角色; 三.添加ftp用户; 四.步骤如下: 五.用添加在用户登录ftp;