要求

移植linux增加系统调用并烧写至开发板

详细步骤

一、搭建linux编译环境

1、GCC 编译器的安装:

tar xzvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz  -C/
arm-linux-gcc -v //查看GCC版本

2、gedit ~/.bashrc

export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin

3、reboot -p 重启

4、cp -f tiny4412_android_defconfig .config

make -->编译

5、安装libz.so

yum install zlib.i686

6、挂载红帽6.4iso镜像

mount -o loop rhel-server-6.4-x86_64-dvd.iso  /mnt
yum install zlib.i686

编译 --> make

1)配置yum:

root@localhost 桌面]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
rhel-source.repo
[root@localhost yum.repos.d]# cp rhel-source.repo my.repo
gedit my.repo
[rhel-source]
name=rhel-source
baseurl=file:///mnt
enabled=1
gpgcheck=0

挂载红帽6.4镜像mount -o loop rhel-server-6.4-x86_64-dvd.iso /mnt

yum install zlib.i686  (for libz.so ,when build linux)
yum install minicom*
yum install ncurses*.i686 (for libncurses.so, when install adb)
yum install libstdc++.i686 (for libstdc++.so,when build android)

2)minicom串口通信工具的安装:

arm-linux-gcc交叉编译环境搭建:

FriendlyARM/tiny4412

yum install minicom*
cd /usr/bin ls /dev/ttyu*
minicom -s 修改默认设备名为ttyUSB0 硬件设备控制关掉 SAVE
开着minicom, 开关板子会出现log

烧写SD启动卡:

(1)、红帽6.4系统下插入事先准备好的SD卡;

查看SD卡设备信息,确定设备别名(重要!不可弄错) :

查看SD卡信息 fdisk -l

Ls sd /dev/sd* -ll //此处SD卡设备名为sdb



(2)、对SD 卡进行分区 ;

先删除SD卡所有分区:

Fdisk /dev/sdb

命令选项

	Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
d 删除所有分区

(3)、p 新建1个主分区

分区前需留100M给Supperboot

公式:

SD卡内存*1024M:内存柱数=100M:起始柱面数



如图2 所示32G SD卡总柱面为19165,套用以上公式计算起始柱面为58;

(4)、修改分区的system id 选择 t

(5)、选择分区类型

l -类型清单

b -在此只能选择FAT32格式

(6)、输入w保存退出

(7)、格式化分区

mkfs.vfat /dev/sdb

(8)、烧写boot程序



sync 执行一下同步命令

(9)、把 image 复制到SD卡中 SD启动卡即制作完成

将SD卡插到板子上进行烧机

二、 搭建NFS文件系统环境

1、 安装minicom

配置yum安装源并安装 yum install minicom

2、 配置PC 端NFS服务

1)关闭PC端防火墙 setup



保存退出

临时关闭 iptables service iptables stop

关闭selinux setenforce 0

查看selinux并修改SELINUX =disabled

gedit /etc/selinux/config

2)写NFS配置文件

	gedit	/etc/exports
/uplookingroot *(rw,sync,no_root_squash)

3)在PC上建立目录 /uplookingroot

用网线连接PC和板子

重启PC reboot -p

4)启动NFS服务 service nfs restart

5)配置IP地址 ifconfig eth0 192.168.1.10 up

测试PC 板子之间的连接 ping 192.168.1.20

6)进入板子 minicom .....

7)挂载目录

mount -t nfs -o nolock,rw 192.168.1.10:/uplookingroot /mnt

8)PC端在/uplookingroot 内编写要传输的文件 minicom端口可见

板子下:cd /mnt

[root@localhost mnt]# ls //可见文件 Hello.c

dnw工具的安装:

tar xzvf dnw-linux.tar.gz

cd dnw-linux/

make

退出挂载 umount /mnt

三、 修改linux内核,增加新的系统调用

1、 解压编译linux源代码,测试当前源代码是否可执行

[root@localhost / ]# tar xzvf linux-3.5-20150121.tgz
cp tiny 4412_linux_defconfig .config
make -j4
ls arch/arm/boot/zImage -ll

2、将zImage拷贝到网络启动的SD卡刷机 //SD卡刷机见一

1)SD卡使用Superboot

[root@localhost install]# ./write4412boot Superboot4412.bin /dev/sdc

start ...........

end .....……

2)同步 sync

3)nfs 环境 //参考二

3、修改linux3.5源码增加系统调用

1) 修改calls.S

[root@localhost linux-3.5]# gedit arch/arm/kernel/calls.S

/* 378 */ CALL(sys_add)

2)gedit /linux-3.5/arch/arm/include/asm/unistd.h

©#define __NR_process_vm_writev (__NR_SYSCALL_BASE+377)

©#define __NR_add (__NR_SYSCALL_BASE+378)

3)

gedit /linux-3.5/arch/arm/kernel/sys_arm.c
asmlinkage long sys_add(int a, int b){
return (a + b);
}

4)编译

[root@localhost linux-3.5]# make

4、将新的zImage拷贝到网络启动的SD卡刷机

5、 做一个动态库

cd	/home/material/code/code_driver/02syscall/01user_so
[root@localhost 01user_so]# ls
add.c add.h test.c

编译

[root@localhost 01user_so]# arm-linux-gcc -shared -fpic add.c -o libadd.so
[root@localhost 01user_so]# ls
add.c add.h libadd.so test.c

6、生成测试程序

[root@localhost 01user_so]# arm-linux-gcc  test.c -o test -L./ -ladd
[root@localhost 01user_so]# ls
add.c add.h libadd.so test test.c

7、 将libadd.so 和 test 下载到开发板

[root@localhost 01user_so]# cp -f libadd.so /uplookingroot/.
[root@localhost 01user_so]# cp -f test /uplookingroot/.

8、进入板子

挂载共享目录

[roorplooking /mount -t nfs -o nolock,rw 192.168.1.10:/uplookingroot /mnt

将libadd.so 拷贝到/lib

[roorplooking /cd /mnt
[roorplooking /mnt cp libadd.so /lib/.

测试

[roorplooking /mnt./test

c =

4

四、写应用程序测试系统

由于Supperboot不能支持我们自己修改的内核,重新编译内核

	tar -xvf linux-3.5-20150121.tgz -C /root
cd linux-3.5
cp tiny4412_linux_defconfig .config
make -j4

构建刷机sd卡: //由于前面已经给sd分过区,在此省略分区操作

images拷贝到sd卡 把sd卡插入PC

cp /arch/arm/boot/zImage Linux/zImage
vim FriendlyARM.ini
OS=Linux 把sd卡插入开发板进行刷机

将开发板与PC进行连接

minicom

开发板开机

配置PC ip ifconfig etho 192.168.1.10

ping 192.168.1.20 测试PC与板子的通讯

挂载共享目录

[roorplooking /mount -t nfs -o nolock,rw 192.168.1.10:/uplookingroot /mnt

将新的zImage拷贝到网络启动的SD卡刷机

编译

[root@localhost 01user_so]# arm-linux-gcc -shared -fpic add.c -o libadd.so
[root@localhost 01user_so]# ls
add.c add.h libadd.so test.c

生成测试程序

[root@localhost 01user_so]# arm-linux-gcc  test.c -o test -L./ -ladd
[root@localhost 01user_so]# ls
add.c add.h libadd.so test test.c

将libadd.so 和 test 下载到开发板

[root@localhost 01user_so]# cp -f libadd.so /uplookingroot/.
[root@localhost 01user_so]# cp -f test /uplookingroot/.

将libadd.so 拷贝到/lib

[roorplooking /cd /mnt
[roorplooking /mnt cp libadd.so /lib/.

测试

[roorplooking /mnt./test
c =
4

效果



ARM Cortex-A9 (tiny 4412)的更多相关文章

  1. swddude -- A SWD programmer for ARM Cortex microcontrollers.

    Introducing swddude I love the ARM Cortex-M series of microcontrollers.   The sheer computational po ...

  2. Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors

    Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...

  3. 【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别

    ARM7 ARM9 ARM Cortex M3 M4 区别 arm7 arm9 可以类比386和奔腾, 不同代,arm9相比arm7指令集和性能都有所增强,arm7和arm9都有带mmu和无mmu的版 ...

  4. 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据

    灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...

  5. 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置

    灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...

  6. 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯

    灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...

  7. ARM Cortex M3系列GPIO口介绍(工作方式探讨)

    一.Cortex M3的GPIO口特性    在介绍GPIO口功能前,有必要先说明一下M3的结构框图,这样能够更好理解总线结构和GPIO所处的位置. Cortex M3结构框图     从图中可以看出 ...

  8. ARM Cortex M3(V7-M架构)硬件启动程序 二

    解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...

  9. ARM Cortex M3(V7-M架构)硬件启动程序 一

    Cortex-m3启动代码分析笔记 启动代码文件名是STM32F10X.S,它的作用先总结下,然后再分析. 启动代码作用一般是: 1)堆和栈的初始化: 2)中断向量表定义: 3)地址重映射及中断向量表 ...

随机推荐

  1. RN中移动组件开发

    在原生的开发中,如果要自定义一些控件,可能会用到touch的相关方法,而React Native也有一套touch机制,说白了就是用JS写了一套方法打通android和ios平台,这里简单讲解下Rea ...

  2. itcast-spring-三大框架整合

    三大框架架构(整合原理) struts整合到spring   hibernate整合到spring 导包 eclipse需要导入   myeclipse不用 单独配置spring容器 单独配置stru ...

  3. mongodb千万级写入怎么优化

    从mysql数据库通过java程序导入单表1300w到mongodb,花了大概50分钟,前1000w条数据中每100w条大概要3分钟,之后的300多w条就差不多每100w条要5到6分钟,之后再从其他的 ...

  4. ClusterControl docker 环境搭建

    ClusterControl 是一款比较强大的数据库管理平台,包含了丰富的数据库管理功能. 我们可以用来方便的进行数据管理 测试使用docker-compose 管理 环境准备 docker-comp ...

  5. RTSP为什么VLC播放器无法播放

    rtsp_tracepoint: rtspservice.c,RTSP_state_machine, state_machine:current state is ready state curren ...

  6. openstack--5--控制节点和计算节点安装配置nova

    Nova相关介绍 目前的Nova主要由API,Compute,Conductor,Scheduler组成 Compute:用来交互并管理虚拟机的生命周期: Scheduler:从可用池中根据各种策略选 ...

  7. ML(5)——神经网络1(神经元模型与激活函数)

    上一章介绍了使用逻辑回归处理分类问题.尽管逻辑回归是个非常好用的模型,但是在处理非线性问题时仍然显得力不从心,下图就是一个例子: 线性模型已经无法很好地拟合上面的样本,所以选择了更复杂的模型,得到了复 ...

  8. GoJS 在 vue 项目中的使用

    GoJS 在 html vue 项目中的使用,github地址:https://github.com/cag2050/gojs_demo GoJS 在 vue-cli 2.x 项目中的使用,githu ...

  9. 配置hive元数据数据库

    <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <v ...

  10. nginx的url规则小tips

    背景信息: 被代理的服务器(10.90.7.2)上,nginx的配置内容 server { listen ; server_name localhost; default_type text/html ...