• 韦东山005_ARM裸机1期加强版


    005_ARM裸机1期加强版(又叫新1期,151节,23节免费,已完结)新1期视频(151节,23节免费)
    第006课开发板熟悉与体验(6节,免费)
    第001节_开发板部件介绍与串口连接(免费)
    如果win不自动安装驱动程序(PL2303_Prolific_DriverInstaller_v1.7.0.exe)
    软件打开COM3远程登录工具()

    	第002节_使用eop烧写裸板程序(免费)
    		F:armOpenOCDwithGUIsetupin      oflash.exe 烧写所有的bin文件
    		
    		U-boot.bin 可以烧写Nor,NAND
    		leds.bin只能NAND
    		
    		启动选择开关
    		
    		**烧写U-boot.bin到Nor,见图04-03_22-35-23-932.png
    

    	第003节_eop常见问题(免费)
    	第004节_使用uboot烧写裸板程序(免费)
    		使用uboot通过USB下载烧写leds.bin文件
    			Nor启动,uboot运行
    			使用uboot的usb下载功能
    			uboot收到文件,再烧到Nand
    			Nand启动,重新上电,运行bin文件
    

    	第005节_恢复出厂系统(免费)
    	第006节_一句话解决嵌入式开发ping问题(免费)
    		**ubuntu 更改IP命令 sudo ifconfig ens33 192.168.11.123
    		**tftp下载
    		**必须使用新的u-boot
    			U-Boot 1.1.6 **enable Ethernet alltime**(May 15 2018 - 19:44:59)
    

    第007课_裸机开发步骤和工具使用(3节,免费))
    	第001节_裸机开发步骤简介(免费)
    	第002节_source insight代码查看工具的使用(免费)
    	第003节_notepad编辑器和二进制文件查看工具(免费)
    第008课_第1个ARM裸板程序及引申(10节,前三节免费)
    	第001节_辅线1_硬件知识_LED原理图
    	第002节_辅线1_硬件知识_S3C2440启动流程与GPIO操作(免费)
    		**当Nor启动时,NorFlash基地址为0,片内RAM地址为0x4000,0000
    		**当NAND启动时,片内4K RAM地址为0,把NAND的前4K复制到片内RAM,NorFlash不可访问
    

    第003节_编写第1个程序点亮LED(免费)
    **LDR读内存:LDR R0,[R1] //设R1的值为x,读取地址x上的数据(4字节),保存到R0中
    **STR写内存:STR R0,[R1] //设R1的值为x,把R0的值写到地址x去(4字节)
    **B跳转:
    **MOV:
    MOV R0,R1 //1的值赋给R0,R0=R1
    MOV R0,#0x100 //R0等于0x100
    **LDR:伪指令
    LDR R0,=0x12345678 //不存在这样的指令,会被拆分为几条真正ARM指令
    //一个arm指令32位,肯定有某些位表示MOV本身
    *led_on.S
    /

    * 点亮LED1: gpf4
    */

    	.text
    	.global _start
    
    	_start:
    
    	/* 配置GPF4为输出引脚
    	 * 把0x100写到地址0x56000050
    	 */
    		ldr r1, =0x56000050
    		ldr r0, =0x100	/* mov r0, #0x100 */
    		str r0, [r1]
    

    /* 设置GPF4输出高电平
    * 把0写到地址0x56000054
    /
    ldr r1, =0x56000054
    ldr r0, =0 /
    mov r0, #0 */
    str r0, [r1]

    /* 死循环 */
    halt:
    b halt

    **Makefile
    all:
    	arm-linux-gcc -c -o led_on.o led_on.S
    	arm-linux-ld -Ttext 0 led_on.o -o led_on.elf
    	arm-linux-objcopy -O binary -S led_on.elf led_on.bin
    	arm-linux-objdump -D led_on.elf > led_on.dis
    clean:
    	rm *.bin *.o *.elf
    **led_on.dis
    
    led_on.elf:     file format elf32-littlearm
    
    Disassembly of section .text:
    
    00000000 <_start>:
       0:	e59f1014 	ldr	r1, [pc, #20]	; 1c <.text+0x1c>
       4:	e3a00c01 	mov	r0, #256	; 0x100
       8:	e5810000 	str	r0, [r1]
       c:	e59f100c 	ldr	r1, [pc, #12]	; 20 <.text+0x20>
      10:	e3a00000 	mov	r0, #0	; 0x0
      14:	e5810000 	str	r0, [r1]
    
    00000018 <halt>:
      18:	eafffffe 	b	18 <halt>
      1c:	56000050 	undefined
      20:	56000054 	undefined			
    
    **led_on.bin
    14 10 9f e5 01 0c a0 e3 00 00 81 e5 0c 10 9f e5
    00 00 a0 e3 00 00 81 e5 fe ff ff ea 50 00 00 56
    54 00 00
    

    **第004节_汇编与机器码_P
    pc Proglam Counter = 当前指令加 8
    lr 返回地址
    sp 栈指针

    修改led_on.S点亮LED2
    直接修改led_on.bin点亮LED2 **MOV指令12位怎么表示一个立即数,其中最低8位称为immed_8,高4位称为rotate_imm。
    
    	就是说,一个立即数0x56000000,循环左移,如果可以得到一个用8位位图表示的数,则该立即数0x56000000是一个合法的立即数;否则,该立即数不合法。
    	高四位:2^4=16,要想表示移位范围为0-31,则每次最少移动2位,即,右移的最小单位为2.这样,2*16就可以表示最多32位的移动。
    

    第005节_编程知识_进制_P
    第006节_编程知识_字节序_位操作_P
    第007节_编写C程序控制LED_P
    第008节_几条汇编指令_bl_add_sub_ldm_stm_P
    第009节_解析C程序的内部机制_P
    第010节_完善LED程序_编写按键程序_P
    &= 意思为:按位与后赋值
    /* 设置GPFCON让GPF4/5/6配置为输出引脚 */
    *pGPFCON &= ~((3<<8) | (3<<10) | (3<<12));
    *pGPFCON |= ((1<<8) | (1<<10) | (1<<12));

    第009课_gcc和arm-linux-gcc和Makefile(8节)

    ​ 第001节_gcc编译器1_gcc常用选项__gcc编译过程详解_P
    ​ gcc常用选项:
    ​ -v:查看gcc编译器的版本,显示gcc执行时的详细过程
    ​ -o Place the output into
    ​ 指定输出文件名为file,这个名称不能跟源文件名同名
    ​ -E Preprocess only; do not compile, assemble or link
    ​ 只预处理,不会编译、汇编、链接
    ​ -S Compile only; do not assemble or link
    ​ 只编译,不会汇编、链接
    ​ -c Compile and assemble, but do not link
    ​ 编译和汇编,不会链接

    ​ gcc -E -o hello.i hello.c
    ​ gcc -S -o hello.s hello.i
    ​ gcc -c -o hello.o hello.s
    ​ gcc -o hello hello.o

    ​ 第002节_gcc编译器2_深入讲解链接过程_P
    ​ 第003节_c语言指针复习1__指向char和int的指针_P
    ​ 第004节_c语言指针复习2_指向数组和字符串的指针_P
    ​ 第005节_Makefile的引入及规则_P
    ​ ​第006节_Makefile的语法_P
    ​ 第007节_Makefile函数_P

    ​ 第008节Makefile实例P

    第010课_掌握ARM芯片时钟体系(2节)

    第001节_S3C2440时钟体系结构_P

    1590714509828

    1590717630079

    第002节_编程提高运行时钟_P

    第011课_串口(UART)的使用(5节)

    第001节_辅线1_硬件知识_UART硬件介绍_P
    第002节_S3C2440_UART编程_P
    第003节_从零实现用于裸机调试的printf函数_手动确定可变参数_P
    第004节_从零实现用于裸机调试的printf函数_自动确定可变参数_P
    第005节_从零实现用于裸机调试的printf函数_printf函数在x86和arm平台的实现_P

    第012课_内存控制器与SDRAM(4节)

    第001节_辅线1_硬件知识_内存接口概念_P
    第002节_辅线1_硬件知识_不同位宽设备的连接_P
    第003节_辅线1_硬件知识_时序图分析示例_P
    第004节_辅线1_硬件知识_SDRAM的设置_P

    第013课_代码重定位(6节)

    第001节_段的概念_重定位的引入_P.zip
    第002节_链接脚本的引入与简单测试_P.zip
    第003节_链接脚本的解析_P.zip
    第004节_拷贝代码和链接脚本的改进_P.zip
    第005节_代码重定位与位置无关码_P.zip
    第006节_重定位_清除BSS段的C函数实现_P.zip

    第014课_异常与中断(8节)

    第001节_概念引入与处理流程_P.zip
    第002节_CPU模式(Mode)_状态(State)与寄存器_P.zip
    第003节_不重要_Thumb指令集程序示例_P.zip
    第004节_und异常模式程序示例_P.zip
    第005节_swi异常模式程序示例_P.zip
    第006节_按键中断程序示例_概述与初始化_P.zip
    第007节_按键中断程序示例_完善_P.zip
    第008节_定时器中断程序示例_P.zip

    第015课_NOR Flash(3节)

    第016课_Nand Flash(5节)

    第017课_LCD(11节)

    第018课_ADC和触摸屏(12节)

    第019课_I2C(7节)

    第020课_SPI(7节)

    第021课_MMU和Cache(4节)

    第022课_传感器(9节)

    H:韦东山Android06_u-boot_内核_根文件系统(新1期_2期间的衔接)视频
    ​ 第001课_U-boot分析与使用
    第001节_u-boot分析之编译体验

    		**U-boot的主线目标功能是
    			从flash中读出内核,放到内存SDRAM中,启动内核。
    				1. 读Flash
    				2. 初始化SDRAM
    					初始化时钟
    					关看门狗	
    				3. 启动内核
    				
    			附加功能:
    				写Flash
    				初始化串口
    				网卡
    				USB		
    

    ​ 第003课_内核配置裁剪及启动流程
    ​ 第001节_内核启动流程分析之编译体验
    ​ 第002节_内核启动流程分析之配置
    ​ 第004课_根文件系统
    ​ 第001节_构建根文件系统之启动第1个程序
    ​ 第002节_构建根文件系统之init进程分析
    ​ 第003节_构建根文件系统之busybox
    ​ 第004节_构建根文件系统之构建根文件系统





    第001节_字符设备驱动程序之概念介绍.mp4

    1590395715845

    1590395892869

    第002节_字符设备驱动程序之LED驱动程序_编写编译

    1590396204902

    1590396423161

    1590396801773

    1590396958822

    主设备号:

    ​ Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。

    ​ 一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。

    第003节_字符设备驱动程序之LED驱动程序_操作LED

    1590709457838

    • 操作虚拟地址,虚拟地址怎么来,用ioremap()地址的映射,把虚拟地址映射成虚拟地址。
    第004节_字符设备驱动程序之LED驱动程序_测试改进

    1590711605643

    • mdev根据系统信息创建设备节点
    第005节_字符设备驱动程序之查询方式的按键驱动程序

    1590712860482

  • 相关阅读:
    【转】MFC中png格式图片贴图的实现
    【转】Windows 中不规则窗体的编程实现
    【转】MFC添加背景图片方法的三种方法
    【转】mfc win7获得管理员权限 使用WIN7风格 使用当前系统风格
    【转】双缓冲讲解及界面贴图
    【转】[内核/驱动]驱动中获取进程全路径和注册表全路径
    【转】Visual C++中DDB与DIB位图编程全攻略(转)
    【转】vs2010中添加splashScreen
    【转】一个在内存里搜索QQ号码的源码,源自看雪论坛
    输出JSON
  • 原文地址:https://www.cnblogs.com/RoyalGuardsTomCat/p/14433711.html
Copyright © 2020-2023  润新知