首页 > 代码库 > 嵌入式linux开发:杂七杂八的话
嵌入式linux开发:杂七杂八的话
1. 编译器:常用的有Sourcery,linaro等。当然芯片厂家一般也会提供可用的编译器。
2. 将配置和编译时的输出O到其他位置:make O=some_dir
这样做的好处是保持源代码树的干净。
注意:O选项必须在每条make命令中给出:
make gconfig O=...
make ARCH=arm CROSS_COMPILE=... O=...
3. 多进程并行编译:make j=N,N是并行进程数量。
4. DeviceTree位置(以arm为例):arch/arm/boot/dts/
5. disk image文件分析
windows下可以用winhex;
linux下可以用losetup加载disk image到loopback device (/dev/loopX)
然后用parted工具分析loopback device上的partition
获得分区信息后继续用losetup按分区加载image
之后就可以用mount挂载loopback分区了
6. EasyBCD安装CentOS
我们需要一个fat32分区,将iso复制到该fat32分区上;
从iso中解压images/和isolinux/;
使用EasyBCD添加grub启动项,并从其启动;
root (hdx, y)
kernel (hdx,y)/isolinux/vmlinuz
initrd (hdx,y)/isolinux/initrd.img
boot
7. 编译出来的uboot(包括SPL)可能需要先转成image才能写入flash。转换工具一般厂商会提供
8. 64位CentOS可能需要额外安装32位lib才能make gconfig/xconfig
9. vncserver如果报bad display name,在/etc/hosts中加入我们的hostname
10. busybox的tftp
tftp -g -r file host #get remote
tftp -p -l file host #put local
11. nfs配置文件(man之)
/home/user ip/mask(insecure,rw,sync,all_squash,anonuid=0,anongid=0)
12. tftp server的root在/etc/xinetd.d/tftp中以-s参数指定
一般在/var/lib/tftpboot
13. driver的Makefile:看Documentation/kbuild
14. dts的编译
执行目录[arch/arm/boot]
# scripts/dtc/dtc dts/xxx.dts -o xxx.dtb -O dtb # -o filename -O format
15. 编译完成后在system.map中可以看到内核符号表和kernel在内存中的位置
16. cat /proc/iomem可以看到memory layout
17. uboot的board config:
include/configs/xxx.h
autoconf.mk #在make后生成
18. 可以先用initramfs+静态dev测试kernel
/dev目录下放console,tty[0-4],ttyS[0-4]。
使用--static编译的一个打印一段message的程序作为/bin/init
19. 静态dev和简单init测试通过后再用devtmpfs
20. kgdb
see Documentation/DocBook,kgdb需要启动参数
(DocBook需要make htmldocs,事先安装xmlto)
下到板子的还是uImage,vmlinux是给gdb的调试文件((使用了-g选项编译))
minicom -s配置串口,清除modem初始化序列
C-AQ退出minicom
arm-linux-xxx-gdb vmlinux
(gdb) set remotebaud 38400
(gdb) target remote /dev/ttyUSB0 # 假设你的host上通过ttyUSB0连接到开发板
21. 使用initramfs时不能自动挂载devtmpfs,需要手动挂载:
mount devtmpfs /dev -t devtmpfs
22. mtd_utils:
flash_erase -j /dev/mtd1 0 0 #格式化为jffs,使用RAW dev
mount /dev/mtdblock1 /mnt/mtdblock1 -t jffs2 #使用block dev
还有其他一些flash_xxx工具
23. 一般较流行的板子在内核中都会有defconfig,例如
make ARCH=arm socfpga_defconfig
可用的defconfig在arch/arm/configs/