chmod 777 ./ -r
改变当前目录所有的文件读写格式
指令有两条SWP 字数绝交换
SWP RO,RO,[R1];该指令完成将R1所指向的存储器中的字数据与RO中的字数据交换
内核模块在动态加载时候内核模块才会被调用
通过module_init 宏来指定
相当于C程序运行时先到MAIN();
如模块加载函数
module_init(hello_init);
在模块加载时候,会调用hello_init()函数;
makefile中
obj -m 表示一个模块
obj -y 表示编译进内核
make命令
会找目标 如果没有加...则会找第一个目标.
内核模块的编译多使用makefile来编译。
在SAMBA中:! service smb restart
重新启动。
tar xvzf 解压的文件 -C 指定的目录(加了-C)
使用命令:
方法一:跟上权路径;
如/usr/local/arm/arm-linux-gcc
方法二:环境变量。bin目录的命令都可以用
export &PATH
1: vi /etc/profile
加上 路径。
在开发板上用的
编译器 arm-linux-gcc (-g 表示调试)
arm-linux-gcc hello.c -o hello
反汇编(转成汇编渔阳)工具
arm-linux-dump -D -S hello >log(输入到log)
ELF 文件查看器
arm-linux-readelf -d hello
内核中## 表示连接的作用
hehe(name) _NR_##name 如果前面hehe(name)中name取read则后面name 也取read
bootloader
一个嵌入式从软件角度来看分为三个层次:
1:引导加载程序
包括固化在固件(firmware)中的boot程序(可选)
和Bootloader两大部分
2:LINUX内核
特定于嵌入式定制的内核
3:文件系统
包括了系统命令和应用程序
一个同时装有BOOTLOADER,内核的启动参数、内核映像和根文件系统。
在嵌入式中通常没有像BIOS那样的固件程序,因此整个系统启动任务就由BOOTLOADER完成
1:能初始化硬件,2:为调用操作系统做好准备。
嵌入式系统将固态存储设备比如FLASH安排在上电后开始执行的位置 如2410 在0X00000000
BOOTLOADER 就放在FLASH中最前端上电后就从0X00000000处执行。
BOOTLOADER移植
流程两个阶段:
阶段1:硬件的初始化(CPU内部的寄存器 内存)
为加载2阶段准备RAM空间
拷贝BOOTLOADER的stage2到RAM中
设置好堆栈(原因:以为第二阶段C也需要堆栈,局部变量需要用到堆栈)
跳转到stage2的C入口点(第二阶段是C语言 第一阶段汇编语言)
第一阶段运行在FLASH中第二阶段运行在内存中
阶段2:
硬件(串口网卡等)初始化
将内核映像和根文件系统从FLASH读到RAM中
调用内核
Uboot
是Bootloader的一种。
是德国开发的Bootloader的程序,支持MIPS/X86/ARM/XSCALE等
makefile 中的术语:依赖 目标 命令
smdk2410_cofig 为目标。在VI 中查找 /名字
uboot 提供了丰富的命令
help 查看命令
环境变量相关
printenv 查看环境变量
setenv 添加修改删除环境变量
如删除file1变量 setenv file1
saveene 保存环境变量 掉电也可以保存
文件下载
tftp 通过网络下载
需要设置好网络步骤
setenv ethaddr 12:34:56:78:9A:bc (网卡MAC地址)
setenv lpaddr 192.168.1.1(开发板的IP地址)
setenv serverip 192.168.1.254 (tftp服务器的地址LINUX服务器的地址)
例子:
tftp 32000000 ulmage
把server (IP 为 serverip)中目录下的ulmage通过tftp读入到0x32000000处
串口下载 loadb
协议kernit
显示内存
md 地址