1. 由于虚拟机所在环境为64 位,而交叉编译工具和其他工具大部分是32 位的,所以要安装32 位的工具sudo apt- get install lib32ncurses5
2. make menuconfig出现 'make menuconfig' requires the ncurses libraries.
sudo apt- get install ncurses- dev
3. make exyons_config时候出现找不到config或者make XXX_config时候如果显示无需对XXX_config,需要修改Makeconfig
#ARCH ?= $(SUBARCH)
ARCH ? = arm 大坑:arm后面不能有空格,否则会提示这是有个目录
#CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
CROSS_COMPILE ? = arm- none- linux- gnueabi-
对空格有严格要求
4. 编译内核时候
CC arch/ arm/ kernel/ suspend. o
/ tmp/ ccLpG6m7. s: Assembler messages:
/ tmp/ ccLpG6m7. s: 278 : Error: garbage following instruction -- `dsb nshst'
/ tmp/ ccLpG6m7. s: 294 : Error: garbage following instruction -- `dsb nsh'
scripts/ Makefile. build: 308 : recipe for target 'arch/arm/kernel/suspend.o' failed
进入make menuconfig
解决:
Power management options -- ->
[ ] Suspend to RAM and standby
5.1537 的芯片1506 的底版烧写的uboot特殊,光盘中的uboot- 20130709 是不能用的太老了
要去下载新版4412 的uboot
6. 如果写驱动时候把file_operations结构体成员的返回值写错,在进行这个操作时候内核就会报错,比如传送数据到app没有宝座,但是只收到一半或者一小部分,如果单纯测试驱动没问题但是应用接收的时候却接收数据不完整,可能原因:copy_to_user时候, 最后一个参数不对,
或者sizeof 时候结构体忘记加上struct ,相应的在应用端read时候也要接收和驱动传送一样的大小,否则传输数据会不完整
7. 今天遇到一个ubuntu向下不兼容的问题,在使用韦东山老师官方制造的16.04u buntu版本中,将uboot烧入闪存卡的时候会出现block is too large的问题,之前用的是32 G闪存卡,所以出现快太大不能读取也能理解,但是我这之前成功烧写的16 G闪存卡换了一个linux就烧写不了,所以抱着试一试的心态,再次安装了12.04 的ubuntu,结果大吃一斤,成功烧入到闪存卡