色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > arm學習筆記及嵌入式系統移植步驟詳解

arm學習筆記及嵌入式系統移植步驟詳解 時間:2018-08-14      來源:未知

一、arm復習

芯片組成:控制器 存儲器 運算器

1、寄存器:

1)通用寄存器:r0-r15 r13:sp r14:lr r15:pc

2)程序狀態寄存器: cpsr spsr 高4位(NZCV) 低8位(FITM)

2、模式

3、異常

通用指令:

移動:mov

四則:add sub

位:and orr

比較:cmp

moveq

跳轉:b bl

mov pc, lr

ldr pc, =main

存取:str ldr

ldr r1, [r0]

str r1, [r0]

多寄存器:stmfd ldmfd

1、需求:com2 poll 發送 接收 (字符串)

2、看原理圖:

1)原理

2)管腳:BUF_XuTXD2---》GPA1_1 BUF_XuRXD2--》GPA1_0

3)控制芯片:有芯片,芯片手冊去看

3、看芯片手冊:

1)管腳: GPA1CON

2)控制芯片:

驅動:

start.S : 啟動文件

main.c : 源文件,驅動文件

makefile :編譯文件

map.lds :鏈接文件

s-->o : arm-linux-gcc start.S -o start.o -c

o--->elf: arm-linux-ld -Tmap.lds start.o -o start.elf

elf--->bin: arm-linux-objcopy -O binary start.elf start.bin

main.c

void uart_sendch(char a)

{

UTXHn = a;

}

void uart_init(void)

{

/*管腳*/

GPA1CON = GPA1CON & ~0xff | 0x22;

/*控制芯片*/

ULCONn = 0x3;

UCONn = UCONn & ~0xf | 0x1 | 0x1<<2;

UBRDIVn = 0x35;

UFRACVALn = 0x4;

}

void main()

{

char a = 'A';

uart_init();

uart_sendch(a);

}

二、加載內核

sudo apt-get install tftpd-hpa

u-boot-fs4412.bin BootLoader二進制文件

uImage 內核的二進制文件

Exynos4412-fs4412.dtb 設備樹的二進制文件

ramdisk.img 根文件系統的二進制文件

rootfs.tar.xz 根文件系統的壓縮包

gatewayip=192.168.2.1 網關

ipaddr=192.168.2.42 目標板IP

netmask=255.255.255.0 掩碼

serverip=192.168.2.240 服務器IP

set gatewayip 192.168.2.1

set ipaddr 192.168.2.42

set netmask 255.255.255.0

set serverip 192.168.2.240

save

tftp 41000000 uImage

tftp 42000000 exynos4412-fs4412.dtb

tftp 43000000 ramdisk.img

bootm 41000000 43000000 42000000

1、把壓縮包放到家目錄下某個目錄

2、進入這個目錄 解壓: tar -xvf u-boot-2013.01.tar.bz2

3、cd u-boot-2013.01

修改makefile:

184 #ifeq ($(HOSTARCH),$(ARCH))

185 CROSS_COMPILE ?= arm-linux-

186 #endif

4、make distclean //清理環境,只在第一次使用

5、make origen_config //選中需要編譯的芯片和板子

6、make //編譯

三、uboot流程

1、找入口---》鏈接文件--》Makefile

2、Makefile中找到 arch\arm\cpu\u-boot.lds

3、u-boot.lds --》ENTRY(_start) //入口函數

CPUDIR/start.o (.text*) //第一個代碼文件

4、_start:(start.S)

-->reset

-->set the cpu to SVC32 mode && 關中斷

-->Setup vector

-->cpu_init_cp15 //Invalidate L1 I/D disable MMU

-->cpu_init_crit

-->lowlevel_init(board/samsung/origen/lowlevel_init.S)

-->如果在內存中:直接到下一步;如果不在內存中:system_clock_init mem_ctrl_asm_init

--> 初始化uart uart_asm_init

--> tzpc_init

-->_main(arch\arm\lib\crt0.S)

-->搭建C環境

--> 清bss

--> board_init_r (arch\arm\lib\board.c)

-->各種設備的初始化,各種邏輯的初始化后

-->for() //等待命令,執行命令

--》main_loop

四、uboot移植流程

1、需求:把內核加載起來

2、確認芯片是否支持(rch\arm\cpu\armv7)

1)支持 goto 3

2) 不支持(新的uboot,芯片廠商

3、確認板子是否支持(board)

1)支持:

2)不支持:新uboot 板子廠家 找芯片一模一樣的板子(origen)

4、cp board/samsung/origen board/samsung/fs4412 -af

cp include/configs/origen.h include/configs/fs4412.h

修改 boards.cfg 增加:

origen arm armv7 origen samsung exynos

fs4412 arm armv7 fs4412 samsung exynos

5、編譯

6、燒寫:

1)斷電,撥碼開關撥到 SD卡啟動

2)上電,進入uboot命令行 FS4412 #

3)tftp 41000000 u-boot.bin (ubunt 把uboot.bin 拷貝到 tftp目錄)

4)movi write u-boot 41000000

1)斷電,撥碼開關撥到 EMMC啟動

2)上電 ,就能看到我們自己做的uboot的效果了

7、驗證:

現象:板子變板磚

思考:程序是否執行到 ---》 添加一個觀察點 --》程序開始的地方點燈

在 start.S中 135行下添加:

136 /*led on*/

137 ldr r0, =0x11000c40

138 ldr r1,[r0]

139 bic r1,r1,#0xf0000000

140 orr r1,r1,#0x10000000

141 str r1,[r0]

142

143 ldr r0, =0x11000c44

144 ldr r1,[r0]

145 orr r1,r1,#0x80

146 str r1,[r0]

現象: 板子依然是板磚。。。。。

思考: uboot 沒有被執行 ----> 上電 到 uboot啟動 中間有一塊 沒有搞清楚的 ---》 芯片手冊 5章節

emmc : bl1 + bl2 + uboot

拷貝 CodeSign4SecureBoot 到 uboot的主目錄下

進入主目錄,執行./build.sh

現象: 板子燈終于亮了。。。。 but 燈滅了 then 亮了 滅了。。。。。

思考: uboot在板子上運行了。板子在不斷的復位

復位原因:1、異常: X

2、看門狗: X

從下往上找,逆向思維,電源---》電源管理模塊

ONO 高電平輸出

現象: 燈一直亮著。。。。 but 終端還是沒有打印

思考: 去看看串口是否ok ---》 修改串口時鐘,確認是100M

現象:終端有顯示了,但是ping命令沒有

思考:ping有,但是是否編譯進去了, common的目錄下去找ping ,ping由宏開關控制, 打開這個宏開關

現象:ping命令有了, but 卡死了

思考: 懷疑網卡是不是出了問題。。。 找dm9000初始化 dm9000_initialize

board_init_r--》eth_initialize --》board_eth_init --》dm9000_initialize

在origin.c 里面 添加網卡初始化 及對應的頭文件內容

#ifdef CONFIG_DRIVER_DM9000

int board_eth_init(bd_t *bis)

{

return dm9000_initialize(bis);

}

#endif

頭文件修改 fs4412.h,具體內容在實驗手冊中看

現象:網卡有了,但是出現下面的打印

ERROR: resetting DM9000 -> not responding

dm9000 not found at 0x05000000 id: 0x00000000

ping failed; host 192.168.2.240 is not alive

思考:0x05000000地址的設備有問題,需要把這個設備初始化好,該設備是SROMC(這個分析原理圖,由片選得知的)

在origin.c 中增加如下調用:

board_init (參考的)

--》smc9115_pre_init

--》s5p_gpio_cfg_pin

--》s5p_config_sromc

board_init (我們自己加的)

--》sdm9000aep_pre_init

--》gpio設置,未封裝

--》exynos_config_sromc

現象:網絡有了,可以用了

五、編譯內核

修改makefile

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-

1、make exynos_defconfig //arch/arm/configs

2、make menuconfig // 功能的選擇 增加或者刪減或者修改

3、make uImage

sudo apt-get install libncurses-dev

mkimage

cp arch/arm/boot/dts/exynos4412-origen.dts arch/arm/boot/dts/exynos4412-fs4412.dts

vi arch/arm/boot/dts/Makefile exynos4412-fs4412.dtb

make dtbs

增加網卡設備:

1、make menuconfig dm9000增加

2、修改設備樹文件 exynos4412-fs4412.dts

#include

srom-cs1@5000000 {

compatible = "simple-bus";

#address-cells = <1>;

#size-cells = <1>;

reg = <0x5000000 0x8000000>;

ranges;

ethernet@5000000 {

compatible = "davicom,dm9000";

reg = <0x5000000 0x2 0x5000004 0x2>;

interrupt-parent = <&gpx0>;

interrupts = <6 IRQ_TYPE_LEVEL_HIGH>;

davicom,no-eeprom;

};

};

自動的把網卡設備開啟,把ip設置好

Networking support --->

Networking options --->

[*] IP: kernel level autoconfiguration

bootargs=root=/dev/ram rw console=ttySAC2,115200 init=/linuxrc ip=192.168.2.42 clk_ignore_unused

NFS啟動

解壓rootfs壓縮包,得到一個目錄,比如是:/home/lyx/mydd/rootfs

在Ubuntu下開啟nfs:

1、修改配置 /etc/exprots

/home/lyx/mydd/rootfs *(rw,sync,no_root_squash,no_subtree_check)

2、 sudo /etc/init.d/nfs-kernel-server restart

在 uboot界面下設置:

setenv bootargs root=/dev/nfs nfsroot=192.168.2.240:/home/lyx/mydd/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.2.42 clk_ignore_unused

set bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000

修改內核的配置,增加nfs

File systems --->

Network File Systems --->

<*> NFS client support

[*] Root file system on NFS

配置好了,make Image 一下

六、busybox 制作方法

1、解壓busybox-1.22.1.tar.bz2

2、進入busybox-1.2

2 執行 make menuconfig

Busybox Settings --->

Build Options --->

[*] Build BusyBox as a static binary (no shared libs) x x

(arm-linux-) Cross Compiler prefix

3、make

4、make install

5、cd _install 擴展我們的目錄:etc lib proc sys tmp //自己創建,再添加

6、填充內容:

etc 參考之前發的 rootfs

lib :cp ~/mydd/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/* lib/ -af

7、rm xxxxx/rootfs -rf

cp _install xxxx/rootfs -af

上一篇:NFS服務端和ftfp客戶端配置的詳細步驟

下一篇:同步與異步的區別詳解

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 成人毛片AV免费 | 99精品久久久久久久婷婷 | 两根大肉大捧一进一出好爽视频 | 亚洲综合无码AV一区二区 | 国产播放隔着超薄丝袜进入 | 亚洲∧V久久久无码精品 | 日本无码视频在线观看 | www.久久免费 | 夜夜欢天天干 | 无码爆乳护士让我爽 | 成人欧美精品一区二区 | 日韩中文字幕三级 | 男人疯狂进入女人下部动态图 | 消息称老熟妇乱视频一区二区 | 全国最大成人网站 | 国产熟妇久久777777 | 国产又粗又大又黄 | 免费国产女王调教在线视频 | 亚洲乱码中文字幕在线 | 国产SM精品调教视频 | 秋霞在线观看视频 | 国产XXXX视频在线 | 4455永久在线观看 | 久久五月精品中文字幕 | 又湿又紧又大又爽A视频国产 | 无套内谢孕妇毛片免费看看 | 久久人人爽天天玩人人妻精品 | 国产三级精品三级在线专区 | 男人添女人下部全视频 | 无码国产精品一区二区免费16 | 亚洲精品久久无码 | 精品无人区一线二线三线区别 | 日本高清免费在线观看 | 国产精品无码素人福利免费 | 日产中文字幕在线观看 | 好男人www影院在线观看 | 丁香五月婷激情综合第九色 | 亚洲肥老太bbw | 狠狠躁天天躁无码中文字幕 | 业余 自由 性别 成熟偷窥 | 蜜臀AV在线无码国产 |