ARM Cortex-A9 (tiny 4412)

最新更新时间:2022-01-27来源: eefocus关键字:ARM  Cortex-A9  tiny 手机看文章 扫描二维码
随时随地手机看文章

要求

移植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

SD卡设备名

(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
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 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic560157.html

上一篇:ARM开发板实现双系统引导的一种方法
下一篇:4412开发板和4418开发板接口区别说明

推荐阅读

OK6410A 开发板 (八) 118 linux-5.11 OK6410A linux对arm异常处理的相同部分解析
.section .vectors, "ax", %progbits.L__vectors_start: W(b) vector_rst W(b) vector_und W(ldr) pc, .L__vectors_start + 0x1000 W(b) vector_pabt W(b) vector_dabt W(b) vector_addrexcptn W(b) vector_irq W(b) vector_fiq每种处理方式中相同的部分 // 8个入口 1. 直接定义 2个 vector_rst: ARM( swi SYS_ERROR0 ) THUMB( svc
发表于 2022-08-10
OK6410A 开发板 (八) 118 linux-5.11 OK6410A arm异常原因及linux应用场景及结果
异常之后,会返回吗?应用程序会被杀掉吗?内核会崩溃吗?gic 还会一直中断吗? .section .vectors, "ax", %progbits.L__vectors_start: W(b) vector_rst W(b) vector_und W(ldr) pc, .L__vectors_start + 0x1000 W(b) vector_pabt W(b) vector_dabt W(b) vector_addrexcptn W(b) vector_irq W(b) vector_fiqreset 异常产生根本原因 通过管脚或寄存器访问对 cpu 的 reset应用
发表于 2022-08-09
OK6410A 开发板 (八) 119 linux-5.11 OK6410A arm-linux的栈
硬件上:armv6 有 6个 R13R13_usr 和 R13_sys 是同一个还有 R13_svc R13_abt R13_und R13_irq R13_fiq软件上linux boot时有一个栈linux 各种异常处理有栈(5个异常模式,1个system模式) 对应多少个栈? svc mode 对应每个进程有一个栈? irq mode 是固定的栈? abort 呢? und 呢 ? fiq 呢? system mode 呢?linux 在 user mode 时 有栈 , (应用程序的栈,每个应用程序有一个栈,有N个应用程序)boot的栈不管,没啥意思从线程和异常来说事1. 线程分类2. 异常分类 每个线程有两个栈,一个内核(
发表于 2022-08-09
arm-linux异常的返回
之前在这里列出了 几个 几个异常入口,现在要考虑 这些异常入口最终会走到哪里去将其分为四种情况考虑// TODO循环卡死 vector_addrexcptn __dabt_invalid __irq_invalid __pabt_invalid __und_invalid返回内核空间 __dabt_svc __pabt_svc __und_svc __fiq_abt __irq_svc __fiq_svc 返回用户空间 vector_swi __dabt_usr __fiq_usr __irq_usr __pabt_usr __und_usr 不考虑 vector_rst返回用户空间的出口函数re
发表于 2022-08-09
<font color='red'>arm</font>-linux异常的返回
ARM32 ARM64 的设备树匹配及兼容ATAGS
arm32 arm64 u-boot 加载 linux的命令 bootm bootm <uImage_addr> // 无设备树,bootm 0x30007FC0 bootm <uImage_addr> <initrd_addr> <dtb_addr> // 有设备树--- nand read.jffs2 0x30007FC0 kernel; // 读内核uImage到内存0x30007FC0 nand read.jffs2 32000000 device_tree; // 读dtb到内存32000000 bootm 0x30007FC0 - 0x32000
发表于 2022-08-08
嵌入式linux开发 (十八) 内存管理(2) ARM内存管理
硬件对内存的管理armv7v8ARM是统一编址的,也就是外设和(内存A)进行统一的编址,共同形成了4G物理地址空间(32位为例子)。内存控制器属于外设,内存属于(内存A).一个soc内部及外扩的内存都属于(内存A).存储器架构 哈佛架构cortex-M cortex-AMPU MMU 的概念定义及实现定义MPU: The memory protection unit (MPU) is used to manage the CPU accesses to memory to prevent one task to accidentally corrupt the memory or resources used by any othe
发表于 2022-08-08

推荐帖子

求助,uboot
uboot改的差不多了,感觉没什么问题,几乎是照着源码改的, 把我的board文件和cpu文件加到卖家给我的uboot包里,编译出来的bin文件完全正常 加到自己在网上下载的包里,编译后只能启动uboot,用ftp下载uclinux镜像时提示packettoobig drivers,net里的文件都改了,实在是不知道错在哪了 状况一:正常编译的bin文件133K,而我自己编译的却只有124K 状况二:卖家给的包里,tools文件夹下有许多exe文件,不知道是干什么用的? 感觉有部
天雪 嵌入式系统
Xilinx Spartan-6 LX9第二批试用名单公布
XilinxSpartan-6LX9第二批试用名单:lylyhs  flander_cx   jomatch  cwpersist   zzw_1979 试用时间:9月26日--10月26日试用要求:  1、试用文档需在一个帖子中完成,可以跟帖不断完善。展示内容须图文结合、视频为加分项。所撰写的文档可为:试用心得、评估文档、项目开发文
EEWORLD社区 FPGA/CPLD
参与HELPER2416开发板助学计划:收到板子
本帖最后由hongyancl于2014-7-916:21编辑 板子终于收到了,上裸照啊 论坛ID:hongyancl日期:2014年7月9日 参与HELPER2416开发板助学计划:收到板子
hongyancl 嵌入式系统
风力摆的电机控制
我用的空心杯电机,但是它都推不动杆子(不重,很轻),这是为啥呀,看视频里的用空心杯电机的转得都特别快,刷的一下就飞老高,我这10度感觉都起不来,心力憔悴啊风力摆的电机控制
木雨曦曦 电子竞赛
nrf24l01数据收一块单片机是否能完成?求代码啊
请问nrf24l01的发送和接受要两块单片机来完成吗?可不可以只用一块单片机啊,能不能给我分享一下一块单片机的收发程序呢? nrf24l01数据收一块单片机是否能完成?求代码啊
jianhong0425 单片机
请问读FLASH中的数据时,要关闭中断吗?
请问读FLASH中的数据时,要关闭中断吗?请问读FLASH中的数据时,要关闭中断吗?
maiwenjian 微控制器 MCU
小广播
实战 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved