smart kids

【技术分享】arm-linux一移植必杀技

0
阅读(7709)

       去年终结了ARM-wince 移植的必杀技,几个简单的要点,现在总结了linux 的关键要点如下,希望大家抛砖。把自己以前移植的wince 和linux 移植的一些简单要点都罗列了,希望大家提出更好的意见,或者指出我笔记的错误。

 

1.uboot传递给linux内核的nfs启动命令行:

setenv bootargs mem=64M console=ttyS0,57600 root=/dev/nfs rw nfsroot=192.168.1.6:/home/linucos/
newmsg/nfsroot nfsaddrs=192.168.1.8:192.168.1.6:192.168.1.1:255.255.255.0

备注:自己ip:服务ip:网关:掩码

2.uboot传递给linux内核的nandflash上文件系统的命令行:

setenv bootargs console=ttyS0,57600 root=/dev/mtdblock0  init=/linuxrc rootfstype=jffs2

备注:(此处0对应第一个分区,类推1对应第二个分区,分区见内核arch相关目录)

3. uboot传递给linux内核内存ramdisk文件系统的命令行:

setenv bootargs console=ttyS0,57600 root=/dev/ram0 rw initrd=0x21100000,15360000 init=/linuxrc

备注:initrd=指示文件系统在内存中的位置,压缩前大小;同时,内核要进行相应的配置

4. busybox下tftp命令使用:

tftp -r tmp -g 192.168.1.6

得到服务器192.168.1.6上的tmp文件,-g表示get,-r表示remote,192.168.1.6表示服务器ip

同理,

tftp –l tmp –p 192.168.1.6

保存本地tmp到192.168.1.6上,-p表示put,-l表示local,192.168.1.6依然是服务器ip

5. 查看linux分区

cat /proc/partitions

可以看见分区的设备名,主次设备号等很实用的

6.同步串口和LCD显示

只要在原来的bootargs上加:console=tty0即可,如:

setenv bootargs console=ttyS0,57600 console=tty0 root=/dev/mtdblock0  init=/linuxrc rootfstype=jffs2

7.linux出现不能登录的情况,即使用户名root正确

(使用denx官方的文件系统,比较全面,很好)

可能是因为etc目录下配置文件被chmod以为改变权限,解决办法是:直接copy新的etc目录即可,同时注意保留修改过的profile等配置文件

8.普通linux C程序简单休眠

包含 #include   <unistd.h>

sleep(5);即可

9.修改root环境变量

root登录后,(ubuntu命令是sudo su)

编辑~/.bashrc文件,新增变量直接写变量如:

JAVA_HOME=/home/.../java所在文件夹

编辑已有变量如:

JAVA_HOME=$JAVA_HOME:/home/.../java所在文件夹

10.终端下快速进入埋藏很深的工作目录的方法

有时候工作目录会很深,简便的办法是:~/.bashrc下增加环境变量即可,如:

工作目录 /home/..../works

增加环境变量WK=/home/..../works

export WK

每次使用只有cd $WK即可

11.ubuntu图形界面用root权限操作

很多时候ubuntu下,只能在终端下root登录操作文件,现在不用了,用下面的方法:

sudo gnome-open 文件夹名称,如:

sudo gonme-open / 用root权限打开根目录了

12.SecureCRT终端回滚行数

有时候,终端结果回滚的行数会很多,有些错误被后边的行覆盖掉

设置 会话选项-回滚缓冲区 值就可以了,比如5000

13.linux 开机logo制作方法

从最初的png图片,制作到最后的ppm图片

# pngtopnm img.png > img.pnm
# pnmquant 224 img.pnm > img1.pnm
# pnmtoplainpnm img1.pnm > logo_linux_clut224.ppm
14.ln 软连接和硬链接之间的区别
ln -s file1 file2 表示建立file2,file2是file1的符号链接,也就是软连接,此时file1不一定存在
ln file1 file2 表示建立file2,file2是file1的硬链接,也就是inode备份,此时file1必须存在
在同一个分区或者说 同一个文件系统 中, 多个文件的物理存贮位置一样, 只是目录项 分别在不同的目录下, 或者文件名(也是一个目录项) 各不相同. 这种存贮方式 是 硬连接. 如果要连接到另一个分区的目录下, 只能用软连接. ls -l 时可以看到, 软连接只是存了一个字符串, 通过这个字符串, 系统就可以访问其代表的文件. 如果是硬连接, ls -l 时可以看到文件的连接数. 删除一个硬连接, 其他文件ls -l时看到的连接数就少一个. 当删除最后一个连接时, 系统将释放该文件的存贮空间
例如:
三个文见 file1 file2 file3
file2 是 file1 的soft link
file3 是 file1 的hard link
file1 的 inode 是100, 那么
file3 的 inode 一定是 100, file2的肯定不是100.
即使你删除了 file2 和 file3, 但是file1 仍然存在.
假如你删除了 file1, 那么 file2 一定抱错, 因为它的"父母"没了.
但file3仍然一切正常. 就好象 copy f1 f3 了一样, 并且保持同样的 inode
15.busybox做的根文件系统出现Kernel panic - not syncing: No init found.  Try passing init= option to kernel.,或者明明目录先有文件却说can't execute './framebuffer': No such file or directory
常见原因以下两个:没有相应的so动态库,为什么没有报没有库却说No such file or directory,估计是因为busybox实现不标准;也可能是由于内核的编译器旧,而编译应用的编译器新,造成不能执行busybox或者应用
16.qtopia2.2.0使用usb鼠标和usb键盘
设置一下环境变量即可
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ARM/qtopia/lib
QTDIR=/usr/local/ARM/qtopia
QPEDIR=/usr/local/ARM/qtopia
QWS_MOUSE_PROTO=USB:/dev/mouse0
export PATH PS1 LD_LIBRARY_PATH QPEDIR QTDIR QWS_MOUSE_PROTO
17.自动登录用busybox做的的根文件系统
busybox的init,似乎没有处理非登录用户的profile,所以很多东西不好处理,但是getty登录的话,每次要输入用户名,经过分析发现,
getty最终把用户名传递给了login,同时root可以配置成无密码登录,所以inittab脚本中,用以下方法自动登录root用户:
ttyS0::respawn:/bin/login root 其中ttyS0为控制tty,respawn等用法参见:
18.insmod lsmod rmmod有时候需要在根文件系统的lib/modules/<内核版本如:2.6.32>/目录下存放模块
否则会出现类似:
insmod: chdir(2.6.26.6): No such file or directory rmmod: module 'hello_world' not found等错误
插入模块 insmod hello.ko,查看模块 lsmod,卸载模块 rmmod hello
19.konqueror配置语句
root@linucos-desktop:/home/linucos/newmsg/9261/works/konqueror-embedded-snapshot-20030705# ./configure --host=arm-linux --target=arm-linux --enable-embedded --enable-qt-embedded  --with-gui=qpe --disable-debug --enable-ftp --enable-static --disable-shared --disable-mt --with-extra-libs=/home/linucos/newmsg/tools/eldk41gcc40/arm/lib:/home/linucos/newmsg/gui/qtopia/qtopia-free-2.2.0/qtopia/lib:/usr/local/ARM/qtopia/lib:/usr/local/ARM/libs --with-extra-includes=/home/linucos/newmsg/tools/eldk41gcc40/arm/usr/include:/home/linucos/newmsg/gui/qtopia/qtopia-free-2.2.0/qtopia/include:/usr/local/ARM/includes -without-ssl --with-qt-dir=$QTDIR:/usr/local/ARM/qtopia --with-qt-includes=/home/linucos/newmsg/gui/qtopia/qtopia-free-2.2.0/qt2/include:/usr/local/ARM/includes --with-qt-libraries=/home/linucos/newmsg/gui/qtopia/qtopia-free-2.2.0/qt2/lib:/usr/local/ARM/qtopia/lib --with-qtopia-dir=$QPEDIR:/usr/local/ARM/qtopia/
结论是,部分库没有找到时候可以这样,:号分开所有可能的lib和include即可
20.printk输出级别和默认级别
没有指定日志级别的printk语句默认采用的级别是 DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),其定义在linux26/kernel/printk.c中可以找到
  日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中):
  #define KERN_EMERG    0/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
  #define KERN_ALERT     1/*报告消息,表示必须立即采取措施*/
  #define KERN_CRIT       2/*临界条件,通常涉及严重的硬件或软件操作失败*/
  #define KERN_ERR        3/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/
  #define KERN_WARNING  4/*警告条件,对可能出现问题的情况进行警告*/
  #define KERN_NOTICE    5/*正常但又重要的条件,用于提醒*/
  #define KERN_INFO       6/*提示信息,如驱动程序启动时,打印硬件信息*/
  #define KERN_DEBUG     7/*调试级别的消息*/
所以,0处在在高级别上,输出时候,使用printk(KERN_EMERG "msg");即可
21.qtopia会出现各种诡异问题
qtopia出现问题时,很多情况下,不是大问题,而是环境变量的问题,如设置mouse,导致串口不能用,设置keyboard,导致鼠标不好用等等
22.qtopia关键代码位置
qtopia-2.2.0基本就在qtopia_root/qt2/src/kernel/Qgfxraster_qws.cpp附近
23.去掉linux开机logo上的光标
   在内核的当前目录进入到drivers/video/console/fbcon.c文件
 将static void fb_flashcursor(void *private)制成空函数如下

   同样的方法将函数static void fbcon_cursor(struct vc_data *vc, int mode)用空函数替换

24.ubuntu停止和开启图形界面服务

/etc/init.d/gdm stop就可以停止图形服务

/etc/init.d/gdm start开启图形服务

25.改变uboot和linux内核内容输出串口

uboot中简单的修改,include/configs/<board_name>.h配置文件即可,我的修改:

#define CONFIG_ATMEL_USART 1
#define CONFIG_USART0  1
#undef CONFIG_USART1
#undef CONFIG_USART2
#undef CONFIG_USART3  1 /* USART 3 is DBGU */ 原来是dbug口,undef后不使用了

linux中,一般在io_map下,两个内容需要做:

第一是添加相应串口设备,第二是注册相应串口为串口控制台,我的修改如下:

/* DBGU on ttyS0. (Rx & Tx only) */
at91_register_uart(0, 0, 0); //原来的

/* USART0 on ttyS1. (Rx & Tx only) */
at91_register_uart(AT91RM9200_ID_US0, 1, 0);  //新加的

/* set serial console to ttyS0 (ie, DBGU) */
at91_set_serial_console(0); //原来的

/* set serial console to ttyS0 (ie, uart0) */
at91_set_serial_console(1); //新加的

内核配置中,稍有修改,调整早期输出到相应串口选项即可,此选项一般在相应的板子类型下,我的修改成uart0

同时,uboot给linux传递参数注意添加console=ttyS1等

26.tar 命令小结

  tar -xvf foo.tar
              verbosely extract foo.tar
  tar -xzf foo.tar.gz
              extract gzipped foo.tar.gz
  tar -cjf foo.tar.bz2 bar/
              create   bzipped   tar  archive  of  the  directory  bar  called
              foo.tar.bz2
  tar -xjf foo.tar.bz2 -C bar/
              extract bzipped foo.tar.bz2 after changing directory to bar
  tar -xzf foo.tar.gz blah.txt
              extract the file blah.txt from foo.tar.gz

27.cp 命令小结

cp source target

- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
- d 拷贝时保留链接。
- f 删除已经存在的目标文件而不提示。
- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
- p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。
- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
- l 不作拷贝,只是链接文件。

28.jffs2文件系统制作

mkfs.jffs2 -r rootfs -o rootfs.jffs2 -e 0x4000 -n

更多选项直接 mkfs.jffs2 help

29.给开发板增加域名解析

自己做了根文件系统之后,发现ping www.baidu.com不行,因为没有设置域名解析服务器,解决办法也很简单:

touch /etc/resolv.conf

那么怎么获取dns 地址呢?也和简单的,因为开发板一般和主机用一个路由,所以呢,看看本机/etc/resolv.conf下面的地址就好了,如样添加即可,我的是:

nameserver 202.101.172.35
nameserver 202.101.172.47

30.qtopia-2.2.0编译x86版本

进入源码根目录后,简单的:

./configure -qpe '-prefix=/usr/local/ARM/qtopia_x86'

make

make install

-qpe 是指 qtopia的配置参数,同时-qte 是指qt-embbed;install 后prefix指定的目录下,既有安装后的x86版本的qtopia了

31.pc上模拟qtopia

我们使用工具qvfb来模拟qtopia,这里用2.2.0版本,根据30中步骤编译成功后:

qvfb -height 240 -width 320 &

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ARM/qtopia_x86

QTDIR=/usr/local/ARM/qtopia_x86

QPEDIR=/usr/local/ARM/qtopia_x86

/usr/local/ARM/qtopia_x86/bin/qpe &

如果,

想要开机启动自己做的东西,不要显示qtopia桌面的话,直接:

/usr/local/ARM/qtopia_x86/bin/music -qws&

31.linux配置网络

ifconfig lo 127.0.0.1

ifconfig eth0 192.168.1.58 netmask 255.255.255.0

route add default gw 192.168.1.1

以上使用busybox 1.15

32.uboot操作nor flash和nand flash

习惯上nor flash被称作flash,nand flash被称作nand flash,很多情况下,涉及到nor和nand的读写

nor读

cp 0x10000000 0x22000000 0x50000

           从哪                  到哪          长度

nor写

cp 0x22000000 0x10000000 0x50000

          从哪                  到哪           长度

nand读

nand read 0x22000000 0xa0000 0x200000

                      到哪              从哪         长度

nand write 0x22000000 0xa0000 0x200000

                      从哪              到哪         长度

33.uboot自行执行命令的方法

在需要执行某命令的地方运行函数run_command("","")即可,如:

run_command("nand read 0x22000000 0xa0000 0x200000;bootm", "");

即可自动执行了

34.linux的io重定向

a、 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;
b、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;
c、 用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;
d、 用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
e、 0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的;
f、 在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;
g、 管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;

cmd > file 把 stdout 重定向到 file 文件中;
cmd >> file 把 stdout 重定向到 file 文件中(追加);
cmd 1> fiel 把 stdout 重定向到 file 文件中;
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;  

cmd 2> file 把 stderr 重定向到 file 文件中;

cmd 2>> file 把 stderr 重定向到 file 文件中(追加);  

cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);

cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout;
cat <>file 以读写的方式打开 file;
cmd < file cmd 命令以 file 文件作为 stdin;
cmd << delimiter Here document,从 stdin 中读入,直至遇到 delimiter 分界符

35.终端语法高亮

终端分为两种:1.本地 2.远程

本地一般是xterm,远程则是secureCRT之类

apt-get install vim 即可替代原有vi无语法高亮的不足

secureCRT中设置终端类型为xterm linux等,重新登录ssh,即可语法高亮

当然,也可修改/etc/vim/vimrc中的相关选项

36.ls或其他命令不能用

注意是不是无意间改变了so共享库的查找路径LD_LIBRARY_PATH,出现

ls: error while loading shared libraries: libc.so.6: ELF file OS ABI invalid

只需要修改回来即可

37.qtopia显示中文与中文化

显示中文两个条件:1.支持中文编码,如utf8。 2. 有中文字体,qtopia默认没有开启unicode支持,开启即可,qtopia的unifont支持中文,详细显示中文和中文化参照地址:http://blog.csdn.net/linucos/archive/2010/03/24/5413257.aspx

38.konqueror支持中文,qtopia能显示中文后,konqueror即可显示中文了,否则尝试选择相应字体或者重新编译

39.qtopia中文输入法

MurphyPinyin输入法,移植相当简单,不再赘述

40.arm linux LCD不能正常显示

一般的3.5的tft lcd默认是RGB的24bit模式,且RGB顺序是高位R低位B,屏幕一般不要初始化即可使用,不能正常显示的原因从以下几个入手:

<1>行长 帧长 行前 行后 帧前 帧后,决定了屏幕显示是否在正确位置,可能硬件没连接好,可能控制器信号没送出

<2>屏幕正常显示,但是闪动或抖动,可以查找clk速率的问题

<3>同时 行长 帧长 行前 行后 帧前 帧后 数据使能 时钟,几个信号的相位可能导致显示不出来或者显示不正常

<4>正常显示,但是颜色不正常,注意R和B的顺序,同时16bit模式下的555和565问题,可以配置linux内核到24位模式尝试

41.c程序加printf调试方法

#if defined(DBG)
#define dbg_printf(fmt,arg...) /
printf(fmt, ##arg)
#else
#define dbg_printf(...) /
do {}while(0);
#endif


#if defined(HYBRIDOS_SAMPLE_DEBUG) #define dbg_printf(fmt,arg...) do{printf(fmt, ##arg);}while(0) #else #define dbg_printf(fmt,arg...) do {}while(0) #endif

42.linux nand flash mtd分区技巧

可以把最后一个分区的.size设置成MTDPART_SIZ_FULL, /* Occupy rest of flash */ ,表示剩余大小

43.jffs2文件系统制作注意

mkfs.jffs2 -r xxx -o xxx.jffs2 -e 擦除大小 -n 没有clean marker -p 不指定大小填充到最后一个eraseblock

一般擦除大小根据nand 手册确定,64M为0x4000 即16K,128M为0x20000 即128K

44.注意mac地址哦

ifconfig eth0 down
ifconfig eth0 hw ether 00:00:AA:BB:CC:DD
ifconfig eth0 up

45.让linux内核支持yaffs2

需要给内核打个补丁(2.6.30),之后内核配置的时候选择下,制作工具分为大page和小page区别,制作即可

46.linux内核解压后停止

出现:

Uncompressing Linux................................................................................................................................ done, booting the kernel.

停止

解决办法,可以尝试bootargs添加mem参数

47.linux驱动架构简单跟踪

linux驱动架构,主要是分层,便于管理咯:比如声音的驱动,先要添加设备,之后再初始化驱动,添加platform设备便于管理,真正的工作在驱动中做
module_init(at91uda1341_init);
上边的init函数中调用了2个关键函数:
at91_add_device_at91uda1341 和 platform_driver_register
这个其实是注册了设备的,注册的设备过程中,最主要的也是初始化了需要用管脚,当然放到驱动初始化中也行,为什么要放在这里呢?才像是告诉后来的设备,这个管脚已经使用了,如果检测到被用了,干脆设备都不要注册了~因为冲突了~module_exit指定的函数会自动调用的,放在特殊的段里~
还有个关键函数是 snd_at91uda1341_probe();
这个是初始化了函数了,除了管脚外,所有的初始化都放在probe里了~probe什么时候调用呢~?
踪影是:
platform_driver_register(&at91uda1341_driver); --》
driver_register(&drv->driver); --》
bus_add_driver(drv); --》
driver_attach(drv); --》
bus_for_each_dev(drv->bus, NULL, drv, __driver_attach); --》
注意参数__driver_attach,他其实是个函数指针
跟着bus_for_each_dev发现
fn(dev, data); fn其实是__driver_attach,
跟着__driver_attach
driver_probe_device(drv, dev); --》
really_probe(dev, drv); --》
drv->probe(dev); 此处是真正的probe函数被调用了的~
综上,也就是module_exit的时候,设备也添加了,驱动也初始化了~

总之呢,一个注册设备分配管脚,一个初始化驱动~

48.uboot的环境变量保存

--1--保存在nand

#define CONFIG_SYS_USE_NANDFLASH

#define CONFIG_ENV_IS_IN_NAND

--2--保存在nor

#define CONFIG_SYS_USE_FLASH

#define CONFIG_ENV_IS_IN_FLASH

其他编译时候缺什么宏,补上就可以了~

49.uboot环境变量保存地址

#define CONFIG_ENV_OFFSET    0x60000

即是相对存储设备的偏移

50.make menuconfig中本来有的选项没有出现,不能选择

检查下,是不是依赖哪个依赖的条件没有被选中,选中即可

51.如何去掉make menuconfig中的依赖关系

所用模块的文件夹下找kconfig脚本,找到你想找的项目,下面会发现:

config TOUCHSCREEN_AD7877
tristate "AD7877 based touchscreens"
depends on SPI_MASTER

depends on字样就是依赖关系,去掉即可显示了,但是会依赖其他问题,那是后话

52.linux下gpio中断问题

error = request_irq(gpio_to_irq(AT91_PIN_PA21),
   uh7843_ts_interrupt,
   0,
   "Touchscreen driver", pdev);

一般这样申请,注意如果改成

error = request_irq(gpio_to_irq(AT91_PIN_PA21),
   uh7843_ts_interrupt,
   IRQF_SHARED,
   "Touchscreen driver", pdev);

申请失败,原因还没有探究

53.linux输入子系统理解

linux输入子系统分为3层来理解:

--1--driver

驱动硬件,需要想core层注册输入设备,所有的信息通过标准消息通知core

--2--core

处理核心,与驱动关系不大

--3--event handle

事件处理,针对不同的设备有不同的时间,具体见driver/input/evdev.c,设备文件也是在此建立的,现在大多event handler都用此文件

54.arm汇编点灯

#if 0
mov r0, #0x1
mov r2, #0x0
str r0, [r2,#0xfffff800]
mov r0, #0x1
mov r2, #0x0
str r0, [r2,#0xfffff810]
mov r0, #0x1
mov r2, #0x0
str r0, [r2,#0xfffff830]
#endif

55.arm的C语言点灯

void shine_led(void)
{
volatile unsigned int cnt = 0;
volatile unsigned int dly = 0;
*((unsigned int*)(0xfffff800 + 0x0)) = (0x1<<0);
*((unsigned int*)(0xfffff800 + 0x10)) = (0x1<<0);
for (cnt = 0; cnt < 6; ++cnt)
{
  if(cnt%2)
  *((unsigned int*)(0xfffff800 + 0x30)) = (0x1<<0);
  else
  *((unsigned int*)(0xfffff800 + 0x34)) = (0x1<<0);
  for(dly = 0; dly < 50000; ++dly);

  for(dly = 0; dly < 50000; ++dly);

  for(dly = 0; dly < 50000; ++dly);


}
}

56.内建环境变量

#define CONFIG_IPADDR 192.168.1.158
#define CONFIG_ETHADDR 12:34:56:78:90:12
#define CONFIG_SERVERIP 192.168.1.60

57.shell判断文件存在与否

ptcf="/etc/pointercal"

if [ ! -f "$ptcf" ]; then
/etc/tslib/bin/ts_calibrate
fi

57.uboot保存环境变量技巧

有时候我们需要nfs和mtd切换启动,复制粘贴不放心,敲来敲去麻烦,可以使用下面的方法,看例子即知道怎么做

ba0=console=ttyS0,57600 root=/dev/mtdblock0 rw init=/linuxrc rootfstype=jffs2
ba1=console=ttyS0,57600 root=/dev/nfs rw nfsroot=192.168.1.60:/home/linucos/newmsg/nfsroot_busybox nfsaddrs=192.168.1.192:192.168.1.60:192.168.1.1:255.255.255.0 mem=64M
bootargs=console=ttyS0,57600 root=/dev/mtdblock0 rw init=/linuxrc rootfstype=jffs2

实际上其中的bootargs设置是这样的

setenv bootargs $(ba0)

也就是uboot可以定义环境变量的,这样,切换启动方式方便至极

58.arm-linux登录多个串口终端自动登录

inittab中

::respawn:/sbin/getty -n -l /bin/autologin 57600 ttyS2
ttyS0::respawn:/bin/login root

这样写,实际上login能够实现自动登录的,但是不能设置波特率,但是getty可以的,但是换做getty的话,自动登录要经过一个脚本,

/bin/autologin内容如下

#! /bin/sh
/bin/login -f root

以上设置可以实现多串口登录,且自动登录

59.ubuntu9.10更新源

gedit /etc/apt/sources.list

网上找找好源

类似

deb http://tw.archive.ubuntu.com/ubuntu/ karmic main universe restricted multiverse
deb http://tw.archive.ubuntu.com/ubuntu/ karmic-updates universe main multiverse restricted
deb http://tw.archive.ubuntu.com/ubuntu/ karmic-proposed universe main multiverse restricted
deb http://tw.archive.ubuntu.com/ubuntu/ karmic-security universe main multiverse restricted
deb http://tw.archive.ubuntu.com/ubuntu/ karmic-backports main multiverse restricted universe
deb-src http://tw.archive.ubuntu.com/ubuntu/ karmic main universe restricted multiverse
deb-src http://tw.archive.ubuntu.com/ubuntu/ karmic-security universe main multiverse restricted
deb-src http://tw.archive.ubuntu.com/ubuntu/ karmic-updates universe main multiverse restricted
deb-src http://tw.archive.ubuntu.com/ubuntu/ karmic-proposed universe main multiverse restricted
deb-src http://tw.archive.ubuntu.com/ubuntu/ karmic-backports universe main multiverse restricted
保存后,

aptitude update #更新列表
ok~看看有没有可用的软件吧~

60. 查看linux内核支持的架构

根目录下 ls arch/arm/configs/

61. ubuntu备份好工具

remastersys

62.ubuntu设置终端语言

export LANGUAGE=en_US.UTF-8

export LANG=en_US.UTF-8