2009年9月16日星期三

Linux操作系统内核启动参数详细解析

 Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。
  如果不使用启动管理器,比如直接从BIOS或者把内核文件用"cp zImage
/dev/fd0"等方法直接从设备启动,就不能给内核传递参数或选项--这也许是我们使用引导管理器比如LILO的好处之一吧。
  Linux的内核参数是以空格分开的一个字符串列表,通常具有如下形式:
  name[=value_1][,value_2]...[,value_10]
  "name"是关键字,内核用它来识别应该把"关键字"后面的值传递给谁,也就是如何处理这个值,是传递给处理例程还是作为环境变量或者抛给"init"。值的个数限制为10,你可以通过再次使用该关键字使用超过10个的参数。
  首先,内核检查关键字是不是 `root='',`nfsroot='', `nfsaddrs='', `ro'',
`rw'',`debug''或`init'',然后内核在bootsetups数组里搜索于该关键字相关联的已注册的处理函数,如果找到相关的已注册的处理函数,则调用这些函数并把关键字后面的值作为参数传递给这些函数。比如你在启动时设置参数name=a,b,c,d,内核搜索bootsetups数组,如果发现"name"已注册,则调用"name"的设置函数如name_setup(),并把a,b,c,d传递给name_setup()执行。
  所有型如"name=value"参数,如果没有被上面所述的设置函数接收,将被解释为系统启动后的环境变量,比如"TERM=vt100"就会被作为一个启动时参数。所有没有被内核设置函数接收也没又被设置成环境变量的参数都将留给init进程处理,比如"single"。
  常用的设备无关启动时参数。
  1、init=...
  设置内核执行的初始化进程名,如果该项没有设置,内核会按顺序尝试/etc/init,
  /bin/init,/sbin/init, /bin/sh,如果所有的都没找到,内核会抛出 kernel
panic:的错误。
  2、nfsaddrs=...
  设置从网络启动时NFS的启动地址,已字符串的形式给出。
  3、nfsroot=...
  设置网络启动时的NFS根名字,如果该字符串不是以
"/"、","、"."开始,默认指向"/tftp-boot"。
  以上2、3在无盘站中很有用处。
  4、no387
  该选项仅当定义了CONFIG_BUGi386时才能用,某些i387协处理器芯片使用32位的保护模式时会有BUG,比如一些浮点运算,使用这个参数可以让内核忽略387协处理器。
  5、no-hlt
  该选项仅当定义了CONFIG_BUGi386时才能用,一些早期的i486DX-100芯片在处理"hlt"指令时会有问题,执行该指令后不能可靠的返回操作系统,使用该选项,可以让Linux系统在CPU空闲的时候不要挂起CPU。
 6、root=...
  该参数告诉内核启动时使用哪个设备作为根文件系统。比如可以指定根文件为hda8:root=/dev/hda8。
  7、ro和rw
  ro参数告诉内核以只读方式加载根文件系统,以便进行文件系统完整性检查,比如运行fsck;rw参数告诉内核以读写方式加载根文件系统,这是默认值。
  8、reserve=...
  保留端口号。格
  式:reserve=iobase,extent[,iobase,extent]...,用来保护一定区域的I/O端口不被设备驱动程序自动探测。在某些机器上,自动探测会失败,或者设备探测错误或者不想让内核初始化设备时会用到该参数;比如:
reserve=0x300,32device=0x300,除device=0x300外所有设备驱动不探测
0x300-0x31f范围的I/O端口。
  9、mem=...
  限制内核使用的内存数量。早期BIOS设计为只能识别64M以下的内存,如果你的内存数量大于64M,你可以指明,如果你指明的数量超过了实际安装的内存数量,系统崩溃是迟早的事情。
  如:mem=0x1000000意味着有16M内存,如果是mem=0x6000000,就是96M内存了。
  注意:很多机型把部分内存作为BIOS的映射,所以你在指定内存大小的时候一定要预留空间。你也可以在
pentium或者更新的CPU上使用mem=nopentium关闭4M的页表,这要在内核配置时申明。
  10、panic=N
  默认情况,内核崩溃--kernel panic
后会宕机而不会重启,你可以设置宕机多少秒之后重启机器;也可以在/proc/sys/kernel/panic文件里设置。
  11、reboot=[warm|cold][,[bios|hard]]
  该选项仅当定义了CONFIG_BUGi386时才能用。2.0.22的内核重启默认为cool
reboot,warm reboot 更快,使用"reboot=bios"可以继承bios的设置。
  12、nosmp 和 maxcpus=N
  仅当定义了
__SMP__,该选项才可用。可以用来禁用多CPU或者指明最多支持的CPU个数。
  内核开发和调试的启动时参数
  这些参数主要用在内核的开发和调试上,如果你不进行类似的工作,你可以简单的跳过本小节。
  1、debug
  Linux的日志级别比较多(详细信息可以参看Linux/kernel.h),一般地,日志的守护进程klogd只把比DEBUG级别高的日志写进磁盘;如果使用该选项,klogd也把内核的DEBUG信息写进日志。
 2、profile=N
  在做内核开发的时候,如果想清楚的知道内核在什么地方耗用了多少CPU的时钟周期,可以使用核心的分析函数设置变量prof_shift为非0值,有两种方式可以实现:一种是在编译时指定,另一种就是通过"profile="来指定;
他给出了一个相当于最小单位--即时钟周期;系统在执行内核代码的时候,profile[address
>;>; prof_shift]的值就会累加,你也可以从/proc/profile得到关于它的一些信息。
  3、swap=N1,N2,N3,N4,N5,N6,N7,N8
  设置内核交换算法的八个参
  数:max_page_age, page_advance, page_decline,page_initial_age,
  age_cluster_fract, age_cluster_min, pageout_weight,bufferout_weight。
  4、buff=N1,N2,N3,N4,N5,N6
  设置内核缓冲内存管理的六个参数:max_buff_age, buff_advance,
buff_decline,buff_initial_age, bufferout_weight, buffermem_grace。
  使用 RAMDISK的参数
  (仅当内核配置并编译了CONFIG_BLK_DEV_RAM)。一般的来说,使用ramdisk并不是一件好事,系统自己会更加有效的使用可用的内存;但是,在启动或者制作启动盘时,使用ramdisk可以很方便的装载软盘等设备上的映象(尤其是安装程序、启动过程中),因为在正真使用物理磁盘之前,必须要加载一些必要的模块,比如文件系统模块,scsi驱动等(可以参见我的initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统)。
早期的ramdisk(比如1.3.48的核心)是静态分配的,必须以ramdisk=N来指定ramdisk的大小;现在ramdisk可以动态增加。一共有四个参数,两个布尔型,两个整形。
  1、load_ramdisk=N
  如果N=1,就加载ramdisk;如果N=0,就不加载ramdisk;默认值为0。
  2、prompt_ramdisk=N
  N=1,提示插入软盘;N=0,不提示插入软盘;默认为1。
  3、ramdisk_size=N或者ramdisk=N
  设定ramdisk的最大值为N KB,默认为4096KB。
  4、ramdisk_start=N
  设置ramdisk的开始块号为N,当ramdisk有内核的映象文件是需要这个参数。
  5、noinitrd
  (仅当内核配置了选项CONFIG_BLK_DEV_RAM和CONFIG_BLK_DEV_INITRD)现在的内核都可以支持initrd了,引导进程首先装载内核和一个初始化的ramdisk,然后内核将initrd转换成普通的ramdisk,也就是读写模式的根文件系统设备。然后Linuxrc执行,然后装载真正的根文件系统,之后ramdisk被卸载,最后执行启动序列,比如/sbin/init。
  选项noinitrd告诉内核不执行上面的步骤,即使内核编译了initrd,而是把initrd的数据写到
/dev/initrd,只是这是一个一次性的设备。

dm355压缩1027x768的视频

压缩的时候一开始会报错
@0x000a3d45:[T:0x40018CMEMK Error: Failed to find a pool which fits 2740224
070] venc - App-> Application started.
CMEM Error: getPool: Failed to get a pool fitting a size 2740224
@0x000a6b2b:[T:0x40018070] venc - ERROR: can't open mpeg4enc
@0x000a7176:[T:0x40018070] venc - app done.
root@192.168.1.222:/opt/dvsdk#
root@192.168.1.222:/opt/dvsdk# ./venc foreman
_vga_422i.yuv 2.mpeg4@0x000aea7a:[T:0x40018070] venc - main> venc
这是因为cmemk.ko分配的缓冲区太小导致的,在loadmodules.sh里将其改大
增加两个3M的pool
启动的时候会报错,说cmemk.ko占用了内核的内存空间,
在uboot内核参数中中将mem=116M
改成mem=109M即可,
正常的进行1024x768的视频压缩。

DM355的启动方式

DM355有两种启动方式,是由BTSEL[1:0]引脚决定的
第一种是从片外的Asynchronous EMIF (AEMIF) 启动 是指从片外的三星OneNAND
器件启动
第二种方式是从片内的ROM启动,执行ROM中的ROM boot loader
(RBL),RBL支持三种片外介质,BTSEL决定RBL针对哪种介质进行启动
– BTSEL[1:0] = 00 - ARM NAND Boot
– BTSEL[1:0] = 10 - ARM MMC/SD Boot
– BTSEL[1:0] = 11 - ARM UART Boot
现在选择从片外的NAND启动,这种启动方式的具体步骤是RBL先从片外NAND上将UBL(user
boot loader)取进ARM内部的RAM中(copies a second stage user boot loader
(UBL) from NAND flash to ARM internal RAM (AIM) and transfers control to
the user-defined
UBL),然后执行,UBL进行的工作是从NAND中将剩下的数据取进DDR中并跳转到那里。
在NAND中存在两种代码,1是UBL,二是用户自己的代码APP,RBL是如何找到UBL的呢,原来对于RBL和APP在Nand中的存储必须符合一定的格式,在存储UBL或者APP代码的第一页是专门用来存储一个信息头,这个信息头的格式如下
/* Some of the parameters are modified runtime */
unsigned int ubldesc [] = {
0xA1ACED00, //Magic number
0x00000020, // Entry point for the UBL
0x00000007, // No. of pages for the UBL code
0x1, // Starting block of UBL in NAND
0x1 // Starting page of UBL in NAND
};
/* Some of the parameters are modified runtime */
unsigned int appdesc [] = {
0xB1ACED22, //Magic number
0x0000000A, // Start block in NAND
0x81080000, // Start address in DDR
0x81080000, // Entry point
0x00000200, // No. of pages for the complete Application
0x00000000 //compression flag
};
这个信息头分别包含了程序加载时的起始地址和入口点等等信息,当DM355复位时,片内ROM上的代码对NAND
CONTROLLER进行初始化并且在NAND中寻找UBL的Magic number
(事先已经约定好的),找到以后就根据信息头里提供的信息将UBL拷贝进片内RAM中(0x00000020,
// Entry point for the
UBL),然后进行执行,UBL的代码在光盘中有提供,其机制和RBL相同,只不过这个UBL是针对UBOOT的,如果不详执行UBOOT而是向执行自己的代码
那么需要将CCS编译出来的OUT文件转化成bin文件 下载到NAND中。
总结一下nand中存放的东西 UBL、uboot、LINUX的内核映像uimage、文件系统。
前两个的下载是用NAND_programmer进行,NAND_programmer的代码在光盘中也有,就是一段运行在DDR中的程序,将输入的UBL
和uboot文件加上信息头后存储到NAND中
后两个的下载用uboot就能实现。

DM355的I2C调试

利用达盛的例程,pcf8574t开始老是报错:
DaVinci I2C WARNING: i2c: NACK detected
DaVinci I2C WARNING: i2c: RAR detected
这个报错是因为从设备没有反馈导致的,
后来发现是8574的地址写错了,导致I2C控制器老出现错误中断。
改正后测试I2C的SCL线的clock为400KHz。
为了和单片机连,需要降频。
修改drivers/i2c/buses/i2c-davinci.c文件
static int __init i2c_davinci_init(void)
{
int status;
struct device *dev = NULL;
DEB0("%s %s", __TIME__, __DATE__);
DEB1("i2c_davinci_init()");
/*
* NOTE: On DaVinci EVM, the i2c bus frequency is set to 20kHz
* so that the MSP430, which is doing software i2c, has
* some extra processing time
*/
if (machine_is_davinci_evm())
i2c_davinci_busFreq = 20;
else if (i2c_davinci_busFreq > 200)
i2c_davinci_busFreq = 400; /*Fast mode */
else
i2c_davinci_busFreq = 100; /*Standard mode */
i2c_clock = clk_get (dev, "I2CCLK");
}

DM355的UART调试

默认的内核中不支持Uart1,要在内核初始化时将它初始化。修改文件arch/arm/mach-davinci/board-dm355-evm.c,在函数board-init函数中增加如下红色部分
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_McBSP1, 1);
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_SPI, 1);
/* Turn on WatchDog timer LPSC. Needed for RESET to work */
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_TIMER2, 1);
/*add uart1 by xujiaxin*/
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_UART1,1);
/*end add*/
davinci_serial_init(&serial_device);
davinci_writel(0x56837210, DAVINCI_VPSS_REGS_BASE + 0x810);
davinci_writel(0x7b3c0004, DAVINCI_VPSS_REGS_BASE + 0x814);
/*enable uart1 by jiaxinxu*/
ptr_pgmgt = (volatile int *)IO_ADDRESS(DAVINCI_UART1_BASE+0x30);
ptr_ier = (volatile int *)IO_ADDRESS(DAVINCI_UART1_BASE+0x4);
*ptr_pgmgt=0x0;
*ptr_ier =0x0;
int del;
for(del=0;del<100000;del++)
*ptr_pgmgt=0x6001;
/*end enable*/
运行rs232程序,一开始函数在发送0x0a时老是会先发送一个0x0d,后来在程序中加入下面两句话
/*RAW格式 否则会出错*/
options.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG);
options.c_oflag&=~OPOST;
就不会出错了。
board_setup_psc函数用来设置PSC模块,该模块的作用是开启某个模块的电源以及使能某个模块。
对UART2进行初始化的时候,必须注意UART2和SD1是复用的。没有改动前的内核初始化时自动的初始化SD1而不是UART2。需要进行一下几点动作才能将SD1的初始化屏蔽掉。
//choose uart2 instead of sd1 jiaxinxu
PINMUX3&=~0x0000ffff;
PINMUX3|= 0x0000a000;
将引脚功能置成UART2,
//conflict with uart2 by jiaxinxu
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_MMC_SD1, 0);
禁能PSC
#if defined(CONFIG_MMC_DAVINCI) || defined(CONFIG_MMC_DAVINCI_MODULE)
&mmc0_device,
//conflict with uart2 by jiaxinxu
//&mmc1_device,

DM355的SD卡虚拟成U盘

将USB的驱动配置成设备模式。连接电脑后自动将SD卡识别成逻辑盘。
内核编译配置如usb. Txt内容。
在/etc/init.d/rcS中加入初始化语句。
insmod musb_hdrc.ko
insmod g_file_storage.ko file=/dev/mmcblk0p1
一开始插上USB以后老是显示无法初始化硬件,是因为USB小板上将D+和D-画反了
遇到的问题:
1.在拍照的过程中,拍摄100幅照片,第一次将USB插到主机上,会显示这100幅照片的大小都是0;但是在板子上输入ls –al /mnt/sdcard看 大小都是15.8K,是正确的。第二次插上USB以后有可能会有一些图像变正确,大小变为15.8K并且可以打开。其他的一些图像就坏掉了。
2.后来对这个问题进行进一步的研究,在不加载USB驱动的情况下拍摄100幅照片,拍摄完成后在串口终端上将SD卡上的数据拷贝到NFS上,再从Linux虚拟机下拷贝到windows上,看图片都是正确的,在串口终端上输入ls –al /mnt/sdcard看 大小都是15.8K。板子断电,拔下SD卡,通过读卡器插到pc机上,在windows下浏览,结果也都是正常。但是如果不进行上述的拷贝工作,只有一副照片m1.jpeg是正常的(随机的有可能其他几个是正常的,但不是所有的都正常),其他的都是0k。将SD卡再插回板子,上电再执行ls –al /mnt/sdcard,发现只有m1.jpeg是正常的,其他的都是0k。

解决办法:linux下,向磁盘写入数据会先将数据缓存在内存里,系统在合适的时候再将数据从内存中写到磁盘里。所以SD卡拔下之前要运行sync命令,保证内存中的数据完全写入磁盘里


DM355文件系统固化

在串口上输入
mount –t yaffs2 /dev/mtdblock3 /mnt
然后
cp -rf /copytoflash4TECHV/* /mnt/
但是当拷贝的时候报错
status check failed: 2
status check failed: 2
nfs: server 192.168.1.147 not responding, still trying
这个问题没有解决
最后将文件系统的压缩文件考到SD卡中,将SD卡的文件考到mtd上 解压
mount -t yaffs2 /dev/mtdblock3 /mnt
mount /dev/mmcblk0p1 /tmp
cp /tmp/copyfl~1.gz /mnt/copy.tar.gz
tar xzvf copy.tar.gz
mv copyflash4TECHV/* ./
rm -rf copyflash4TECHV/

DM355的SPI调试

对于dm355evm
/dev文件夹下没有spi设备,只有一个eeprom设备,这个设备用spi接口进行控制。该设备的设备文件是/dev/mtdblock5.他的驱动程序是at25xxA_eeprom.c。为什么他的设备文件是/dev/mtdblock5呢?在at25xxA_eeprom.c中的eeprom_probe函数中,调用了
ret = add_mtd_device(mtd)将该eeprom加入了mtdblock的链表中。其源码如下:

将DEBUG(0, "mtd: Giving out device %d to %s\n",i,
mtd->name);一句打印出来是:
drivers/spi/spi.cmtd: Giving out device 5 to spi_eeprom

同样我们可以看到。
mtd: Giving out device 0 to bootloader
mtd: Giving out device 1 to params
mtd: Giving out device 2 to kernel
mtd: Giving out device 3 to filesystem1
mtd: Giving out device 4 to filesystem2

如果不需要EEPROM那么可以将这个驱动程序进行一些修改 改成SPI的驱动程序
主要的底层驱动文件有四个spi.c spi.h dm355_spi_master.h dm355_spi_master.c
spi.c 和spi.h主要进行了SPI驱动的上层封装 dm355_spi_master.h
dm355_spi_master.c则是对底层的寄存器进行访问

一开始调试的时候发现一个bug 当发送N个字节的时候老是会多发一个数
而且在最后一个数发送之前CS会有一个小毛刺。
后来去阅读代码
发现最后那个字节是作者故意加上的
为了防止这个毛刺对访问eeprom控制数据的影响。
看了DM355底层的spi寄存器,发现问题处在SPIDAT1寄存器上。
去网上查解决办法 搜到了DM355的勘误表 原来是一个芯片BUG 靠!
根据勘误表上的解决办法修改成功后的SPI
调用spi write连续写数(或spi read读数 )C S是一直使能的。
但是 先写数再读数 CS中间是有一段不使能。
进行速度测试后的结果是:
SPI 的clk是4MHz
Spi 读写速度是300000Bytes/s
linux下寄存器各字节分开访问的接口函数在include » asm-arm » arch-davinci
的io.h中

00001 /*
00002 * DaVinci IO address definitions
00003 *
00004 * Copied from include/asm/arm/arch-omap/io.h
00005 *
00006 * 2007 (c) MontaVista Software, Inc. This file is licensed under
00007 * the terms of the GNU General Public License version 2. This program
00008 * is licensed "as is" without any warranty of any kind, whether
express
00009 * or implied.
00010 */
00011 #ifndef __ASM_ARCH_IO_H
00012 #define __ASM_ARCH_IO_H
00013
00014 #define IO_SPACE_LIMIT 0xffffffff
00015
00016 /*
00017 *
----------------------------------------------------------------------------
00018 * I/O mapping
00019 *
----------------------------------------------------------------------------
00020 */
00021 #define IO_PHYS 0x01c00000
00022 #define IO_OFFSET 0xfd000000 /* Virtual IO = 0xfec00000 */
00023 #define IO_SIZE 0x00400000
00024 #define IO_VIRT (IO_PHYS + IO_OFFSET)
00025 #define io_p2v(pa) ((pa) + IO_OFFSET)
00026 #define io_v2p(va) ((va) - IO_OFFSET)
00027 #define IO_ADDRESS(x) io_p2v(x)
00028
00029 /*
00030 * We don't actually have real ISA nor PCI buses, but there is so many
00031 * drivers out there that might just work if we fake them...
00032 */
00033 #define PCIO_BASE 0
00034 #define __io(a) ((void __iomem *)(PCIO_BASE + (a)))
00035 #define __mem_pci(a) (a)
00036 #define __mem_isa(a) (a)
00037
00038 #ifndef __ASSEMBLER__
00039
00040 /*
00041 * Functions to access the DaVinci IO region
00042 *
00043 * NOTE: - Use davinci_read/write[bwl] for physical register addresses
00044 * - Use __raw_read/write[bwl]() for virtual register addresses
00045 * - Use IO_ADDRESS(phys_addr) to convert registers to virtual
addresses
00046 * - DO NOT use hardcoded virtual addresses to allow changing
the
00047 * IO address space again if needed
00048 */
00049 #define davinci_readb(a) (*(volatile unsigned char
*)IO_ADDRESS(a))
00050 #define davinci_readw(a) (*(volatile unsigned short
*)IO_ADDRESS(a))
00051 #define davinci_readl(a) (*(volatile unsigned int
*)IO_ADDRESS(a))
00052
00053 #define davinci_writeb(v,a) (*(volatile unsigned char
*)IO_ADDRESS(a) = (v))
00054 #define davinci_writew(v,a) (*(volatile unsigned short
*)IO_ADDRESS(a) = (v))
00055 #define davinci_writel(v,a) (*(volatile unsigned int
*)IO_ADDRESS(a) = (v))
00056
00057 /* 16 bit uses LDRH/STRH, base +/- offset_8 */
00058 typedef struct { volatile u16 offset[256]; } __regbase16;
00059 #define __REGV16(vaddr) ((__regbase16 *)((vaddr)&~0xff)) \
00060 ->offset[((vaddr)&0xff)>>1]
00061 #define __REG16(paddr) __REGV16(io_p2v(paddr))
00062
00063 /* 8/32 bit uses LDR/STR, base +/- offset_12 */
00064 typedef struct { volatile u8 offset[4096]; } __regbase8;
00065 #define __REGV8(vaddr) ((__regbase8 *)((vaddr)&~4095)) \
00066 ->offset[((vaddr)&4095)>>0]
00067 #define __REG8(paddr) __REGV8(io_p2v(paddr))
00068
00069 typedef struct { volatile u32 offset[4096]; } __regbase32;
00070 #define __REGV32(vaddr) ((__regbase32 *)((vaddr)&~4095)) \
00071 ->offset[((vaddr)&4095)>>2]
00072
00073 #define __REG(paddr) __REGV32(io_p2v(paddr))
00074 #else
00075
00076 #define __REG(x) (*((volatile unsigned long *)io_p2v(x)))
00077
00078

DM6446 OSD

TMS320DM6446支持背景窗颜色,两个视频窗口,两个OSD窗口,一个指针(cursor)窗口。它们以递增的顺序排列:
一个特有的第二个OSD窗口(OSDWIN1)可以用来配置成属性窗口来控制视频窗口和第一个OSD窗口(OSDWIN0)的混合(如透明度)。因为"alpha"混合功能是OSDWIN1最通用的功能,所以以下就主要讨论第一个OSD窗口(OSDWIN0)用来显示OSD图片,以及第二个OSD窗口(OSDWIN1)用作属性窗口来控制混合。
OSD窗口可以配置成接收RGB565或者bitmap数据。一般情况,RGB,BITMAP和原始图像数据格式(raw
data
format)在技术行业是可以交换的。如果每个像素使用的bit数一样,那么这些格式就一样。在达芬奇处理器上却不是这种情况。它们提供了配置成RGB565
或者
bitmap的选项。当OSD窗口配置成接收bitmap数据,它就使用256条目的颜色查找表(CLUT)。这意味着最大颜色深度是8bit(4,2,1bit的也支持)。当OSD窗口配置成接收RGB565数据,CLUT就不需要的了,因为RGB数据在外部存储器中先转换成YCBCR;RGB565使用16bit/pixel,因此能接收64k颜色。两个窗口都可以同时配置成接收bitmap数据。然而,只有一个OSD窗口可以配置成接收RGB565数据二不能两个都配置。因此,如果第二个OSD窗口用作属性窗口,第一个OSD窗口最好使用RGB565模式,主要因为它可以存取16bits(64k颜色)。
Linux
有两个重要的驱动结构,块驱动和特征驱动块驱动允许无须存取并能挂载到文件系统中。包括了硬盘驱动,外部RAM,及copmpact
flash驱动。Character驱动读取作为流,以FIFO顺序(如音频视频)。所以大家会测出,OSD功能是作为character(视频驱动)驱动。
Linux的另一个的特征是character驱动能以类似的方式存取文件。这意味着你可以open,write,close这些设备跟操作文件一样。从Linux的命令提示下,你可以copy(cp),display(cat)
及pipe(>>)数据从一个文件到另一个文件中。这个强大的特征允许把数据放到OSD窗口中而不用写任何的代码。
达芬奇平台提供了访问视频硬件的两个Linux驱动,V4L2视频采集驱动(视频处理前端VPFE
--- davinci_vpfe.c)和FBDev(即Framebuffer设备)显示驱动(视频处理后端VPBE
---- davincifb.c)。
(1)Video for Linux
2(V4L2)是一个标准的,二级Linux视频输入驱动,它修正了第一版的一个bug。
(2)FBDev是一个标准的Linux视频输出驱动,用来映射显示设备帧存。如DaVinci处理器到user空间。
Linux frame buffer display device(ie. FBDev
驱动)包含了OSD特征。帧存驱动提供了显示硬件的概括。它令视频输出硬件(OSD亦如此)作为一个帧存设备。并因此允许软件访问图形硬件就像写入一个缓冲区。跟上面提到的一样,输出设备缓存存取跟访问文件一样,一般定位在
/dev 路径中。在这种情况下,这个路径我们感兴趣的是改变DaVinci OSD
是/dev/fb/0。使用这个路径,我们能修改显示,而只是通过一个定义好的接口。它的操作包括跟文件一样(如open,
read,write,close)的操作和设备指定的命令(ioctls
来查询/设置关于硬件的信息)。
我们应该熟悉下面的命令:
cp – copy (e.g. >cp osd.r16 /dev/fb/0 --copies osd.r16 file to /dev/fb/0
设备)
把以上的几点放到一起,通过写一个简单的命令(>cp osd.r16
/dev/fb/0)就可以把osd.r16的内容复制到OSD帧存中,并能显示。Osd.r16文件从哪里来呢?这个文件包含了现有显示到OSD的内容;因此通过图像编辑器(如GIMP)编辑好图像后,通过运行转换工具(tar.gz
文件中)就可以转换。但是GIMP要创建什么样格式的文件呢?推荐的格式是BMP。
步骤如下:
(1)创建OSD图像通过图像编辑器(如GIMP)并且保存为BMP文件。
(2)运行小程序来转换为RGB565格式。>.bmpToRgb16
mysod.bmp,这个命令就会产生osd.r16文件。
(3)把转换后的文件复制到OSD帧存中。>cp osd.r16 /dev/fb/0
(4)重复以上的几步,直到满意。保存osd.r16文件,它就可以被应用程序加到源代码中了。
需要指出的是属性窗口不应该设置为100%视频(所有都为0),因为这样混合水平不允许OSD图形显示。

自动切换有线、无线网络

如果你经常移动你的电脑,你可能会遇到没有网线或者没有无线网络可用的情况。
操作系统在启动时检测计算机的网卡型号并在开机时自动加载驱动模块。默认情况下,操作系统只使用其中的一个网卡,默认情况因计算机而异。如:笔记本一般都同时有无线、有线网卡,大部门笔记本默认使用有线网卡,但也有一些笔记本默认使用无线网卡,如NEC的某些款笔记本。
如果默认使用有线网卡,而在使用过程中拔掉网线,那么操作系统不会自动切换到无线网络(假设此时无线网络可用),你所有的数据报还会阻塞在有线网卡处,进行重传直至超时出错,即:你上不去网了。
如果你想使用无线网络来继续上网,两个办法:
1,禁用掉有线网卡。
     禁用掉有线网卡,可用的自然只剩下无线网卡了(假设你只有这2个网卡);
2,重启计算机。
     计算机在重启时会检测网卡的连通性,然后使能能够连通的网卡。网卡的连通性是通过物理连通性来判断出来的,你插上网线,网卡就处于连通状态。简单说,如果你一个计算机插上2个网卡,一个插网线,一个没插网线,那么系统重启后的默认网卡就是插网线的那个网卡。但是如果两个网卡都插网线、或者两个网卡都没插网线,那么系统选择默认网卡的规则我还不知道,如果你知道,麻烦告诉我:dpinglee@gmail.com

继续开头的状况:你也许希望在插入网线或无线网络可用时网络能够自动连上
在这里你可以找到帮助你实现这个功能的一些工具。
fplugd是 一个在 插入或拔出网线时启动或停止网络连接的 程序。它也可以检测你的 无线网卡和AP的 关联,或者是 在 AP进入范围时检测。
使用 ifplugd 启动(triggering)网络设置
ifplugd 守护进程根据相关的硬件有没有接入网络来激活或关闭接口。这个程序能够检测网线是否已经插入或无线网卡(Wi-Fi)是否能访问 AP(虽然 waproamd 比较适合后一种情况)。当 ifplugd 发现连接状态改变时,它能运行一个代理脚本,缺省会呼叫 ifup 或 ifdown。
你可以安装这个服务( Ifplugd ),使得当网络接入的时候自动配置网络,当网络断开的时候自动取消配置。这对于笔记本电脑这样的使用移动式的网络适配器的情况很有用,因为他只会在网络实际接入的时候才会配置网络接口。另外一个可能会用得着它的情况是,你需要重启你的网络,可是你既不想重启电脑也不想在 shell (终端)中配置。
在默认情况下,它会检查 eth0 设备。更改这个设置(以及更改其他设置,比如等待时间),可以编辑 /etc/ifplugd/ifplugd.conf 。
ifplugd的 配置相当简单。配置文件放置在 /etc/conf.d/net中。运行man ifplugd以获得详细的 变量信息。同时,请查看/etc/conf.d/net.example以获得更多例子。
运行这个命令来启动它:
# /etc/rc.d/ifplugd start
或者将它加入/etc/rc.conf 的 DAEMONS 列表,这样它就能开机自动启动了。

还有一些工具如netplug可供选择。netplug是 ifplugd的 轻量级替代者,但是它依赖于系统内核网络驱动才能正常工作,兼容性稍差。

透过财报“侦破”公司的持久竞争优势 ――读玛丽・巴菲特、戴维・克拉克《巴菲特教你读财报》

有些人喜欢看《花花公子》,而我喜欢看公司年报。  ——沃伦・巴菲特

最近笔者与中道巴菲特俱乐部的同仁讨论这样的问题:如何看待本杰明・格雷厄姆反对拜访上市公司管理层的“怪念头”?笔者以为换一个角度看,这也称得上是个“伟大的念头”,因为他认为这意味着“欺骗”,他希望“和对手,即使是个小家伙,在平等的竞技场上比赛,使用任何人都能获得的那么一点信息。”,他所谓的“那么一点信息”主要是指财务报告。
格雷厄姆是财务分析之父,他创立了财务分析的基本框架、基本原则,也创造了财务分析这个职业。巴菲特作为他的得意门生、衣钵传人,财务分析的功夫自然十分了得。他收购公司从不做所谓“尽职调查”,因为他认为最重要的是要以合适的价格购买合适的商业,选择合适的合作伙伴。他最看重的是公司的持久的竞争优势,而“尽职调查”,其实调查不出公司的持久竞争优势,而财务报表却能透露出“持久竞争优势”的蛛丝马迹。
严格地讲,这本《巴菲特教你读财报》是巴菲特的前媳妇玛丽・巴菲特和巴菲特专家戴维・克拉克教你读财报。只不过解读的核心,是顺着巴菲特的思路,就像侦探一样,“侦破”巴菲特最为看重的公司的持久竞争优势
巴菲特之所以能成为世界首富,有赖于两大发现:一个发现是如何辨别具有持久竞争优势的优质企业。巴菲特把这些具有持久竞争优势的企业比喻为“超级明星”,他们
不外乎三种基本商业模式:要么是某种特别商品的卖方(如可口可乐、宝洁、百威等),要么是某种特别服务的卖方(如富国银行、穆迪公司、美国快递公司等),要么是大众有持续需求的商品或者服务的卖方与低成本买方的统一体(如沃尔玛、好市多超市、内布拉斯加家居超市等)。
无论是哪种模式,竞争优势的“持续性”是关键。玛丽・巴菲特称之为“巴菲特打开金库的钥匙”。以可口可乐公司为例,在过去122年里都销售着同一种产品,无需花费巨资研发新产品和更新厂房设备,产品的一致性带来利润的持续稳定,股东也因此越来越富有。
另一个发现是如何估算具有持久竞争优势的优质企业的价值。20世纪80年代末期,巴菲特在哥伦比亚大学的一场演讲中首次提出了“股权债券”的概念:一家具有持久性竞争优势的公司,有着强劲的、可预测的利润增长,使其股票变成一种息票利率不断增长的“股权债券”。这种债券就是公司的股票,而它的“息票利率”就是公司的税前利润(不是公司派发的红利)。与普通债券不同,股权债券的息票利率不是固定的,而是年复一年地保持增长态,股票债券的价值自然也不断地攀升,其市场价值大约等于每股税前盈利除以长期公司债券利率。
巴菲特的两大发现,都离不开查看财务报表。其方法和福尔摩斯破案的手法有几分相似:尽可能收集所有的事实,然后坐下来思考和推理,抽两支烟,拉拉小提琴,山重水复疑无路,柳暗花明又一村,突然间灵光一闪,答案蹦了出来。只不过,福尔摩斯的答案是案件的真相和凶手;而巴菲特的答案是公司的持久竞争优势和内在价值。
本书分别对损益表、资产负债表、现金流量表的科目逐项进行介绍和分析,力求总结出巴菲特用以“侦破”公司持久竞争优势的黄金法则。
巴菲特着重从损益表中挖掘公司是否需要靠大量研发以保持竞争力,是否需要通过财务杠杆以获取利润等信息,用以分析该公司获得利润的方式,判断其经济增长的原动力。利润的来源比利润本身更具有意义。巴菲特分析损益表时,主要关注毛利率、销售费用及一般管理费用占销售毛利的比例、研发费用、折旧费用、利息支出、税前利润、净利润和每股收益八个指标,其中一些指标的经验值对我们分析中国的上市公司有重要的参考价值。例如,毛利率是巴菲特寻求长期赢利的关键指标,具有持久竞争优势的公司毛利率能够长期保持在40%及以上,销售费用及一般管理费用占销售毛利的比例最好保持在30%以下,净利润占总收入的比例一直保持在20%以上 (
银行和金融公司不属此列,这类公司如果出现异常高的净利润率,通常意味着其风险管理部门过于松懈。)等等。
资产负债应该关注的十四个指标中,绝大部分指标或多或少都可以提供该公司是否具有持久竞争优势的证据。所以巴菲特在试图判断一家公司是否具有持久竞争优势时,首先会去查看公司拥有多少资产(包括现金和财产),承担多少债务(包括公司对供货商的应付款、银行贷款以及债券),逐项对各个科目进行单独分析和汇总分析,并计算几个重要的财务指标,如流动比率、资产回报率、债务股权比率、股东权益回报率等,用以判断公司的资产质量、经营效率、财务风险、公司竞争优势的质量和持续性,避开可能的骗局和陷阱。
对于现金流量表,巴菲特最关注资本开支和回购股票两个指标。因为他发现,“如果一家公司将净利润用于资本开支的比例一直保持在50%以下,那么你可以把它列入具有持久竞争优势公司的候选者名单。如果该比例保持在低于25%的水平,那这家公司就很可能具有有利的持续性竞争优势。”。如果一家公司经常进行股票回购,就很有可能是一家具有持久竞争优势的公司,因为只有这样的公司才有充裕的资金进行股票回购。
透过财报“侦破”公司的持久竞争优势,是巴菲特超越其师格雷厄姆、区别于其他投资行家的最独特之处,也正是本书的特色和价值所在。美中不足的是,作者没有抛开财务报表具体科目,就巴菲特在做财务分析、价值评估时常用的一个重要概念——“所有者收益”作出介绍并展开讨论。不了解这个重要概念,损益表所显示的报告收益,对投资者仍然可能是一颗烟雾弹。这不能不说是个遗憾。

云服务:互联网颠覆传统工业社会的开端

阿里和盛大两大平台的商业本质是:通过繁殖大量创业公司提供丰富的个性化产品,以满足市场上日益膨胀的个性化需求。其繁殖方式是为创业公司提供资金、推广、支付、物流、客服一整套服务,把自己的运营能力像水和电一样让外部随需使用。
这就是云服务的商业模式。
  云服务的诞生前提是:互联网打破地域分割形成一个统一大市场,为个性化需求提供产品开始有利可图。其客观效果是:把创业成本降到最低,创业者只专注于创意等核心环节,运营和管理将不再重要。小公司开始挑战大公司,颠覆“规模制胜”的工业文明。我们的社会和文化将更加独立和自由。
 
  马云为什么这样红?

  他不仅让你走上挣钱之路,那还是一条独立和自由之路。淘宝把单个创业者无力承担的环节全部搞定:物流、支付、广告,其运营和服务能力像水和电一样,让创业者自由获取
  马云说:“如果我能创业成功,那么80%的中国人都能创业成功。”怎么可能?
  如果近距离观察过这个人,或者在《赢在中国》里见过他语惊四座,那你就会知道:这个人的智慧和秉性跟那张脸一样稀有。除了他自己,没人有足够的想象力把马云跟80%的中国人相比。不过,当“草泥马”在网络上流行之后,唐竞新开始对这句话深信不疑。
  唐竞新是一个平凡的中国青年。大学毕业后到网易做编辑,2年后升为高级,领导颇信任。唐竞新的主要工作,就是对比如刘翔退赛等社会事件做包装和炒作。越是能引起网民点击、宣泄甚至斗殴的新闻,越是好新闻。
  唐竞新的生活转变发生在2009年1月。一夜之间,富有伟大想象力的中国网民创造出一个叫“草泥马”的神兽,立刻风靡,成为全社会的宠物。唐竞新轻车熟路完成了炒作的工作,却有点遗憾:如此好的一个题材,除了贡献几百万点击,还有没有可供挖掘的实际价值?!
  伟大在一瞬间发生。唐竞新灵光一现:以这些愤青们在网络上展现的热情,如果有一件草泥马T恤或者公仔,他们会不会穿在身上或系在书包上,在大街上招摇而过?在网上发泄爽,把这种感觉带到线下,影响更多人,岂不是更爽!唐竞新干了一票,拿出几千块钱,自己设计了草泥马公仔和T恤,找到广州番禺一个工厂赶制了一批,放到淘宝网卖。结果出乎意料,在没有任何信用度的情况下,一共卖出去几千个。唐竞新找到了一条路。再经过后来“绿坝娘”和“贾君鹏”两次事件的相同操作,唐竞新心里有底了:这条路,走得通。
  这不仅是挣钱之路,也是一条独立和自由之路。2009年5月,唐竞新从网易辞职,拿着工作三年攒下的几万块,做了一个专职的淘宝卖家。
  现在,有必要对这个故事做一番经济学的总结:什么力量使得唐竞新跟马云结合在一起。
  第一,马云搭建的淘宝平台让一个之前不能成立的商业模式成为现实。也就是,利用互联网的聚集力量,淘宝把全国的消费者聚集到一个平台上,再小的细分需求也有了规模效应。
  假设10万个人里面,只有一个人会对草泥马公仔感兴趣,那么全中国就有1万人感兴趣,而几千万人的广东省只有几十个人感兴趣。假设唐竞新只能在广州一条大街上叫卖,叫到嗓子沙哑、等到天荒地老也卖不出几个,他肯定不会离开网易创业。但当全国1.5亿网民在淘宝汇集,唐竞新成功卖出几千个公仔,有几千块的利润,他才可能离职创业。
  第二,淘宝平台团结了一帮伙伴,帮助唐竞新走完整个链条,把运营一个生意的成本和门槛降到了最低。具体是:通过淘宝发布信息和图片,通过阿里妈妈和直通车来推销和打广告,通过签约的物流商来送货,通过支付宝来收钱,通过阿里旺旺来和买家沟通。
  唐竞新需要做的,就是专心致志,把自己对社会热点的敏锐、对网络愤青的了解以及设计一个卡通形象的创意发挥出来。整个链条一言以蔽之:马云的平台+唐竞新的创意=一个成功的个人创业。
  淘宝只有一个,而唐竞新在中国还至少有一万个。那些同样在门户里撑大梁的编辑,或者艺术学院的精灵、游历世界的摄影师,都具有类似的素质。上面那套逻辑同样适用。
  唐竞新说:“我要赞扬淘宝,是一个可以为之奋斗的事业。”这也是淘宝跟QQ或者网络游戏的不同:上QQ,要花钱,做淘宝,是挣钱;玩网游,是消遣,做淘宝,是事业。这就是马云全部力量的来源。

  陈天桥所见略同
  你研发游戏,我来搞定其他所有环节、承担所有费用,而且你赚大头。——陈天桥
  时势造英雄,而非英雄造时势。其证据就是:在一个大势即将成型的时候,并不只有一个人在朝这个方向努力,而是一批人,他们都在顺势而为。
  早在2005年,陈天桥就开始考虑建立平台。他有现实的压力:好游戏被上游几家寡头垄断,在下游做代理,受制于人。自主研发则风险太大,研发精英们很容易得到VC支持,自立门户。如果能够把盛大的运营平台向研发精英们开放,不仅能摆脱上游的游戏供应商的控制,而且能保证稳定的新游戏来源。
  反过来,平台的建立也有现实动力。当时游戏业研发精英只有两条路:第一是自己招兵买马,不仅研发,还有运营、销售、市场、渠道,搞个独立公司。这样的要求高、成本大、风险大,如果仅就精通研发和策划,这条路不划算。第二是加入一个公司,成为一颗螺丝钉,打工。而一旦陈天桥开口说“你研发游戏,我来搞定其他所有环节、承担所有费用,而且你赚大头”,没几个人会不动心。
  
其实,作为一个创意产业,只有最核心的创意和策划在不断变化,作为辅助的渠道、支付、推广、服务器、客服支持一旦建立,就基本不变。对于社会整体,多一个公司去建立这一套东西,都属于“重复建设”,浪费资源。
  于是,盛大在2007年推出“千万亿”计划:提供1万平方米办公场地,投资1亿元,资助1千人自主开发游戏。到现在,不仅有数十家创业公司选择盛大平台,包括拿到几千万美元VC的蓝港以及上市公司金山也选择盛大平台。
  好,关键问题是:马云和陈天桥所借助的“大势”到底是什么?
  互联网。
  当互联网打破了地域的区隔,实现一个统一大市场后,之前因为成本问题而无法实现的细分需求和细分市场,忽然变得有利可图。唐竞新在网上卖T恤正是如此。这会彻底释放大众对个性化商品的需求,进一步激发生产者为满足这些需求而生发的创造力。那些在工业社会里被压抑的个性、情感和创意,通过互联网这个管道喷薄而出!
  一个向所有创造者提供运营支持,把无限丰富的个性化的产品跟个性化的消费者相互对接的“整合”型平台就顺势而生。这个平台所提供的服务就是“云服务”。从此,在工业社会以大规模和低价格取胜的法则让位于在信息时代的个性化营销和柔性化生产,以及随之而来的社会化物流。
  接下来,让我们从历史观、从商业进步的角度来进一步理解这一场变革。
  中央电厂、云计算、云服务
  如果你理解了中央电厂和云计算的来由和价值,那么,你会明白云服务。它的核心是让服务和运营能力像电一样能够长距离传输,随需索取
  电,给人类带来了持久强大的能量。当它能够实行长距离传输,在地球的一端产生,在另一端被使用,这意味着什么?
  在马云向大众介绍阿里集团整体期望构建的“新商业文明”时,其中的基础就是:让电子商务能力像电一样,能够被千家万户随需索取和使用。这是什么意思?这有什么结果?
  我们需要再花几十秒来理解“电”的奇妙世界。
  在人类没有实现电的长距离传输前,电对人类的价值跟蒸汽一样,只能在有煤炭和流水等发电材料的地方建立工厂。由于严重依赖自然资源,工业能力集中而垄断。当电的长距离传输成为现实之后,人类的生活因之有了翻天覆地的变化,等待加工的原材料和准备出售的产品可以不必长距离传输。谁需要电,谁就向一个统一的中央电厂索取。各种行业开始兴起,电开始进入家庭,并催生了一个史上最大的产业:家用电器。紧随冰箱、电视、洗衣机的普及,妇女的地位和生活方式发生改变,人类开始有了现在的家庭生活。
  是不是非常奇妙!?
  其实近两年来的“云计算”也与此类似。互联网普及前,IT产业已经有几十年历史。这几十年就相当于电的长距离传输没有被解决的年代。诸如存储、处理和计算等IT能力,必须在其产生的地方被消费。于是,每个人都有一台电脑,相当于一个自己拥有的电厂。这台电脑上高性能的英特尔处理器、大容量的硬盘以及强大的微软软件,就相当于用于产生电流的煤。电脑就在手指下工作,我们因此得到了IT能力。
  正因为每个人都需要一个电厂,所以微软和英特尔成了IT业霸主,CTO或者网管成为每个大公司和小公司必备的职位,并且,即使我们的硬盘和处理器并不是24小时运转,但我们都必须为此掏钱。
  借助互联网,“云计算”实现了IT能力的远距离传输。我们在Google上搜索,并不需要下载Google的软件到电脑上;我们在Gmail里的邮件,并不需要存储到本地的硬盘。这些计算能力和存储能力,都在Google位于美国硅谷的服务器上运行,但却能被远在地球这一端的我们“随需索取”。
  这将会对IT业以及每家公司的结构造成深刻变革。
  我们不再需要把英特尔处理器、微软软件以及一个庞大的硬盘买回家,只需要一个能连上互联网的终端即可。这就是上网本崛起的背景。于是,那些靠向每个地球人贩卖硬件和软件的巨无霸会像恐龙一样消失。IT不再重要。CTO和网管这样的职位再不是必须。接下来,可能大量的IT人员会失业,大学里的计算机专业会萎缩。
  如果你已经理解了中央电厂和云计算的来由和价值,那你也就明白了云服务,也就是服务和运营能力能够像电一样长距离传输,随需索取。不是所有公司都必须去建立一套推广渠道和销售队伍,自备一套物流体系和一个呼叫中心。阿里和盛大平台的能力,也就是你的能力。马云和陈天桥能撬动的资源,也就是你能享受的资源。想想吧,这是多么神奇?!
  每个创业者和每个公司只需专注于自己的核心环节,比如奇怪的创意、离谱的设计、精巧的程序、美妙的文字。天才们不再需要耗费大量的时间在老前辈们引以为豪的“搭团队、带队伍”上,他们可以天马行空。管理与运营不再重要,大多数人将从事务性的工作中解放出来,投入自己感兴趣的创意工作。当然,他们也跟唐竞新一样,自然迎来了独立和自由。
  网商创业法门:创造力!
  你无论是卖独特的产品还是独特的营销,归根结底,是卖“创造力”。只有创新一途,才能武装网络革命者去冲击甚至颠覆那个以大规模和低价格取胜的、死板而冷静的传统工业体系
  人的创造力是可怕的!这是唐竞新在淘宝店铺“掌柜寄语”的第一句话。
  其实,关于淘宝小卖家的清苦,并不是新闻。据说80%以上的淘宝卖家,起早贪黑、精打细算、如履薄冰,每个月挣到的也就是千把块生活费。他们担心被大卖家打压、被淘宝抛弃。他们集体遭受到传统渠道的挤压,大部分没有社会经验,对网上创业的困难估计不足。
  那好,来听听26岁的小青年唐竞新怎么看。
  质疑:你能活下来吗?你的核心竞争力?
  唐竞新:自己的判断力。要做T恤很容易,不过我可以比其他人做得更好。
  继续质疑:到底凭什么?
  唐竞新:因为我在网易血战了三年,执行力和判断力都被检验过,尤其是新闻这一行。和新浪、搜狐、腾讯、奥运会、512地震,大小战役无数次。在指标评测中,我拿过几次第一。做新闻那些东西移植到T恤设计上来,同样一个主题设计,也有可能全国第一。一个全国第一的东西,肯定可以卖。剩下的只是对市场营销的考验。
  这几句话里,已经包含了网上创业的两条法门:第一,拿出独特的人家没有的产品,所谓“非标准品”。草泥马在网络上风行后的第三天,唐竞新的T恤就摆上了货架。这个果敢和速度是大公司做不到的。第二,如果只能卖比如手机和电脑这样的“标准品”,就需要独特的“市场营销”。同样是卖手机,只有当服务特别能打动客户时,才可能在大商家的信誉、规模和价格的三重优势下生存。
  无论是独特的产品还是独特的营销,归根结底,是“创造力”。做别人做不到或者不敢做的事情。下面稍举几例。
  ● 王小帮,一个边远山区的老实农民,在淘宝上专卖家乡的大枣等农产品。其所在的农村没有快递,只能通过平邮,农产品一到两个礼拜才能送到各地。但由于价格实惠、产品确实够“土”,所以生意火爆。
  ● 与淘宝网店通行的“一周7天,每天24小时在线”的规则不同,MissHana一度一周只开半天。其他所有时间,店主都在选货,以绝对保证“件件是极品”。一大帮女孩在一周时间里都翘首以待,而在店铺开门的半天里,所有货物都被一抢而光。
  ● 川妹子家政服务,把旗下的“高端保姆”都放到口碑网上,给出个性化的介绍,比如“4号擅长做川菜”,“8号喜欢带小孩”。接受雇主的点评和提问,同时可在网上进行视频面试。
  ● Gainreel,卖纹胸和内衣,在淘宝营业额第二年就过千万。老板张翔的秘诀是“客服”:导购小姐以“体贴入微”的服务俘获买家。比如有买家是乳腺癌患者,一半乳房被切除,那导购小姐就会以这种病症如何保养、何种质料无毒、术后保健等与之交流;有买家是中学生,“什么都不知道”,那导购小姐就是她这方面的“第一个老师”,教她如何选择纹胸,以及相关“青春期难题”。
  ● 上海伟雅,2004年开始写网商故事,渐有影响力。后来进化成一门营销生意,很多网商出钱要上海伟雅来写自己。从开始按字数、按点击效果计费,到后来作为顾问收咨询费。据说,这在淘宝上是一个上千万的生意。
  跟上海伟雅类似的,为淘宝和阿里巴巴上的卖家买家服务的“第三方服务商”不仅数量和种类越来越多,并且逐渐成为一个盘根错节的生态体系,被叫做“社会化”。有为新开店铺做网页设计的“网店装修师”,在淘宝上找人卖人的“网络猎头”,为卖家提供培训和货源推荐的“店小三”,为卖家做品牌设计和商标注册的“网络商标代理”,为买家和卖家之间化解冲突的“差评调解员”,以至于网拍模特、网络砍价师、网上分销……足有三百六十行。
  一旦成为一个社会化的自循环、自管理、自协调的生态体系,就能彻底激发这些社会人的创新意识,扩大其创新空间。也只有创新一途,才能武装这些网络革命者去冲击甚至颠覆那个以大规模和低价格取胜的、死板而冷静的传统工业体系。
  千万不能低估这股被互联网释放出来的力量。下面是唐竞新写在其淘宝店铺上的另一句话:“淘宝是一个购物平台,有没有可能成为一个文化平台呢?
  不可能,可能,不可能,可能。为什么不可能?购物应该是一个很快乐的过程,在淘宝上看漫画也会很好玩。”
  Oh, my god !

  淘宝+梁凯>亚马逊
  梁凯的五洲在线只做网络零售的运营。相比于京东、亚马逊,其成本结构里少了一块“获取流量”的费用,这块费用占到一般B2C公司成本的10%~20%,它由淘宝来完成
  在中国网购市场,谁是淘宝的对手?谁有可能削弱淘宝?
  徐桂军就这个问题跟淘宝的人士交流过多次,答案是:在全球就是亚马逊,在中国就是京东、当当、Vancl、红孩子等垂直B2C。徐桂军是上海网策管理咨询创始人,为大企业做电子商务咨询和外包。其客户来头很大,比如戴尔、海尔。
  亚马逊是B2C,直接面对客户。淘宝是B2B2C,由淘宝卖家而不是淘宝自己面对客户。B2C有几点相对优势。
  第一,专业化的精耕细作。京东就做3C产品,当当就卖书影碟,红孩子就瞄准育婴用品,物流、支付等等都不一样。但在淘宝,不同行业由不同团队负责,淘宝整个2000人,分散在不同行业人就很少。第二,信赖度高。面对京东商城,是不是要比面对一个两钻的淘宝卖家更有安全感?第三,规模效益大。就3C产品而言,京东的流水就要比淘宝最大的卖家还要大几十倍,分摊下来的单位成本和费用更低。京东融资几千万美元,你有没有听说过哪个淘宝皇冠卖家融资了?所以,京东能做更扎实的IT后台,甚至自建物流。
  淘宝占有中国网购80%的市场,但京东和Vancl们的成长速度令人吃惊。如何节制这些亚马逊的模仿者们?
  于是有了梁凯。
  梁凯在创业前十多年,都在为一个未知的事业做无意识的积累。在康柏做大客户销售,于是理解了一个大品牌商如何开拓渠道、中间需要什么环节。在甲骨文见识了正统的电子商务。当时帮中石油做电子商务,知道一个传统企业做电子商务是多么难,无论有多少钱,体制、人才、模式、内部流程,处处都难。需要从无到有建立一个新系统,以及其中的步骤和资源调度。在UT斯达康近距离接触吴鹰、谭智,明白了创业的第一关键是和资本市场结合,选择资本的兴趣而不是个人的兴趣。
  当2007年底淘宝开辟“商城”业务的时候,梁凯立刻就知道:这是一个平台性的业务,在中间层一定需要服务商,才能解决好两端的衔接问题。说白了,大的品牌商如何在淘宝这个平台上同买家见面,需要有人提供服务,否则就会像中石油那样一筹莫展。于是,梁凯觉得这是一个机会。他已经有大品牌如何开拓销售渠道的经验,有电子商务系统架构的经验,并且他也判定:这是资本下一个热点。
  于是2007年底,帮助传统企业建立电子商务体系的五洲在线成立了。当天宇朗通把生产的手机从库房里运出来交给五洲在线,五洲会完成从建立网店、在线销售、物流配送直至货到回款的全部过程。
  现在,顺着梁凯的思路来回答“淘宝+五洲在线>亚马逊”的原因。
  电子商务产业链有三个环节:流量的汇聚,网络零售的运营,网络品牌的塑造。传统B2C做了其中两个或者三个环节,比如,亚马逊和京东做第一和第二个环节,品牌塑造由品牌商自己做;而Vancl就做了全部三个环节。
  五洲在线只做运营这一个处于中间的环节。品牌由生产商自己做,品牌店就开在淘宝商城,所以流量由淘宝来做。
  于是,五洲在线与京东们的差别在于,其成本结构里少了一块“获取流量”的费用,这一块费用占到一般B2C公司成本的10%~20%。当然,这部分费用并没有凭空消失,而是由平台淘宝来完成。事实是,“专业”的淘宝能更效率地完成流量的汇聚:目前淘宝占网购市场80%,而其流量获取成本一旦被200万个卖家分摊,就变得非常稀薄。另一个优势是,五洲在线为品牌商开的淘宝店铺是以品牌商自己命名的,品牌商更有归属感,买家也更有信赖。
  回到主题,五洲在线+淘宝的模式,本质上就是在分工合作的基础上一揽子解决了传统品牌商的“电子商务化”难题。这两家的电子商务能力能够像电一样被品牌商随需索取,即“云服务”。目前,在五洲在线帮助下入驻淘宝商城的大品牌有几十家,比如天宇朗通、探路者、爱慕内衣。
  最近,B2C先锋Vancl也加入了这个队伍。是个好消息。

  封疆大吏袁月明
  袁月明在淘宝上办起了“创业园”,复制一个小淘宝,实现大学生零成本创业。他在淘帝国商而优则仕,成为淘宝的封疆大吏,赋有行政统辖的使命
  黄马褂。清代一种官服,只有皇帝的近身侍卫、御前大臣,或者获皇帝特别赏赐者才可以穿着。袁月明就有一件黄马褂。在其网上主页的最显著位置,就是他“御赐黄马褂”的照片。
  袁月明是谁?
  他是淘宝皇冠级资深卖家。2007年获淘宝大学“领军剑”奖,2008年获“十大网商”称号,2009年获“淘宝帝国”至尊荣誉奖“黄马褂”。他也是淘宝网珠三角商盟创始人及盟主、淘宝大学华南地区讲师负责人。在华南和珠三角这个中国经济重镇,袁月明就相当于淘帝国的封疆大吏。且慢,那个执掌“淘帝国”的人岂不是皇帝?
  铁木真。亲自给袁月明穿上黄马褂的,就是“铁木真”,也就是淘宝CEO陆兆禧的网名。
  是的,这是一个体系。不光在命名上,在战略协作上也是一个体系。袁月明在珠三角所做的,就是淘宝整个帝国使命的一个缩影。
  2003年,ERP讲师袁月明月薪一万。是年7月,马云斥资进入C2C,淘宝创立。是年末,袁月明开始在淘宝开店卖数码产品。当时他告诉自己:“如果能每月赚够一万块,就离职做专职店主。”第三个月,袁月明利润1万,第五个月,利润2万。于是,袁月明离职创业,一个人打理淘宝店。
  2007年,袁月明的网店有5个员工,包括仓储、客服、美工、财务,做出上千万收入。是年12月,袁月明把网店全部交给太太打理,自己开始第二次创业,建立珠海网商创业网络科技有限公司,简称“创业园”。袁月明要做的,就是在珠海以至于华南,复制一个小淘宝出来:实现大学生“零成本”创业。
  创业园使用面积6000余平方米,有专业摄影室、会议室、培训室、会客室,多IP专业光纤接入。专为电子商务商家、中小企业电子商务部,尤其是网络创业的应届毕业生提供办公、仓储、打包、发货、融资贷款一条龙服务,帮助商家降低办公、仓储成本,最大程度节约运营开支。组织园内商家集体进货,集体与物流公司谈判,以降低成本,同时提供信息共享、技能培训、集中营销。
  目前为止,有200个大学生在创业园实习。期间,他们会学习电子商务的4个入门和6个中级课程,熟悉淘宝所有规则和小卖家如何立足的技巧。他们在淘宝开店,由袁月明辅导。毕业后,他们可根据淘宝销售记录获得学校担保的贷款,在创业园内正式开张。也就是袁月明所说的“零成本”创业。
  目前为止,创业园已有商家39个,皇冠级商家4个,二期入园的商家有50个。东莞、深圳的创业园已经启动,广州和汕头的创业园在筹备中。
  是的,淘宝大帝国已经由之前的“一个鱼龙混杂、草莽喧嚣的江湖”逐渐转变成“具有地域行政划分的、上下传承并协作的机构”。大淘宝里有小淘宝,诸如袁月明这样的商人会商而优则仕。
  回到故事的开头,如果陆兆禧是铁木真,那马云又是谁?再给你说一段故事。
  2008年国庆节期间,马云带着淘宝所有高管到西安参观秦始皇兵马俑。马云说“要让大家从传统文化中感受、体验那种一统天下的气势”。秦朝,是中国历史上第一个统一的大帝国。秦始皇,统一度量衡、统一货币、统一文字,奠定了今后中国两千年封建历史的基础架构。
  如果马云自比秦始皇,他要统一的是什么?
 
     阿里集权
  秦始皇统一货币、文字、度量衡,阿里需要统一电子商务流程上的各种标准。目的一样,为了巩固一个统一市场以黏住用户(国民),并树立自己的核心(集权)地位
  梁春晓是一个学者,清醒,斯文,讲原则。他是中国信息经济学会电子商务专委会副主任,一个在中国互联网江湖里的屈指可数的真文人之一。
  有趣的是,梁春晓在阿里巴巴这个鱼龙混杂、刀光剑影的小江湖里待了下来,Title从“高级研究员”做成“副总裁”。在中国互联网里,为研究员设立副总裁的职位,可能除了阿里巴巴之外没有第二家。这个江湖里到处是暴力和恩怨,凭的是实力和冷血。一个文人,如何存活?!
  马云自然有他的理由。
  即便统一货币、度量衡、文字这些国策是秦始皇自己定的,他也需要一个精英的文官集团来为这个大纲设立规范、评估可行性以及建立理论框架。尤其,当这是一个前无古人、没有思路可以参考的事业时。
  统一货币、度量衡、文字,就是要建立一个统一大市场,减少思想交流和货物运输的成本,有利于中央集权的建立。如果用这一套来类比阿里集团,“统一”有两个层面的意思。
  第一个层面,就“水平面”这个维度而言,统一的大市场。阿里巴巴在B2B上建立全球、淘宝在C2C上建立全国的大市场。正如在唐竞新的故事里提到,没有一个统一市场带来的规模效应,唐竞新这样的小贩没法活。这一点已经基本实现。
  第二个层面,就“垂直面”这个维度而言,上下贯穿的产业链。这一点还远没有实现。
  唐竞新对淘宝还有非常多不满:第一,还需要自己去郊区工业园里一一挑选“靠谱”的生产商,讨价还价,盯着从打版到出货每一个环节,“超级无敌累”。第二,淘宝配套设施的效果还不令人放心。唐竞新没用阿里妈妈作推广工具,没在淘宝上给物流下单,而是开辟了另外的渠道。第三,正因为这些“额外”的负担和工作,唐竞新不能专注于设计。他雇过一个员工,但管理有问题,后来只好请自己的弟弟来帮忙,从此“被揶揄为家族企业”。
  一个亢奋,却疲惫而惭愧的创业者。如果阿里集团的“垂直产业链”被打通,唐竞新就会成为一个快乐而轻松的创业者。来看细节:
  第一,在阿里巴巴上根据诚信等级和交易历史来选择供应商。由于阿里巴巴和淘宝之间的数据库已经打通,唐竞新只需要在淘宝后台把相应的订单通知到阿里巴巴上的供应商,就可以坐等收货。对了,其实唐竞新和供应商都在使用阿里软件提供的诸如“钱掌柜”这样的在线管理软件,数据交流会很通畅。
  第二,由于淘宝选择了宅急送等几家物流商作为自己的紧密合作伙伴,对于淘宝卖家的订单会给予最优惠的折扣,并且自动享受低成本保险,于是唐竞新选择在线下单。物流商会到供应商那里提货,直接送达买家。无论是通过支付宝,还是货到付款,淘宝都会定时把钱打进唐竞新的账户。
  第三,在口碑网和淘宝融为一体后,唐竞新的客户们开始在他的商店里评论每一件新出炉的T恤,发牢骚,给建议,形成一个社区。全国的时尚愤青们在这里汇聚,他们既是T恤的消费者,也是无尽创意的贡献者,不断吸引新人加入。唐竞新再也不愁推广。
  最后,唐竞新发现自己有两个出路。A:专注于创意,除了“设计全天下最酷毙的T恤”之外,不干任何其他事情。于是他辞掉了弟弟,再不是一个“家族公司”。B:扩大规模,招聘更多美工和3D程序员,不仅做T恤,还做公仔、玩具、汽车装饰品。当然,他需要一百万资金。于是,凭着在阿里巴巴和淘宝上的信用记录和业绩数据,经过阿里集团的担保,贷到了款,由“创意天才”向“企业家”转变。
  是不是很美好?
  这只是一个形象的感觉,梁春晓给出了一个更为精简而准确的描述:
  阿里平台打通了从需求、生产、技术到销售、支付、服务的全部链条,并且把物流、技术、融资等各种第三方服务商团结在这个平台上,形成了一个开放的生态系统。这就是所谓“电子商务基础服务提供商”的形态:任何一个人或者企业一旦连通这个平台,它就可以像用电和水一样享受全套的运营和服务。
  秦帝国统一货币、文字、度量衡,最终是为了建立统一的中央集权。阿里帝国亦如此。
  打通产业链是为了提供一站式服务,一站式服务的核心是黏住用户,用户在哪里,所有伙伴和服务就被黏在哪里。要疏通流程就必须统一标准,遵守一套标准的人越多,标准的价值就越大。而用户和标准,就是阿里集团主宰电子商务世界的两大基础,也是一个开放平台的最核心。
  不用羡慕。对于那个能够顺应潮流、释放人类创造力的幸运儿,这是历史给予的应有回报。

  最大的商业价值是给人自由
  我们正在迎来一个“个体户”的时代,也就是自由创意、独立创业的时代。下一个云服务平台会在哪个群体诞生?
  宁为鸡头,勿为凤尾,中国人为什么信这个?
  鸡头有自由,想怎么干就怎么干;凤尾无自由,只能跟随和盲从。如果可以选择,没人愿意成为流水线上的工人,日复一日重复同一个动作;没人愿意成为机器人的一只手臂,委屈自己去实现别人的梦想。所以,建立在“违背人性”基础上的工业社会的效率和规模,怎么可能不被打破?
  既然人人渴望自由,那各行各业都理应出现一个能提供“云服务”的平台,一揽子解决掉属于“重复性建设”的运营问题,给予每个人充分的创意空间。这个思路,绝不仅仅局限于淘宝和盛大圈定的领域,也绝不仅仅只是马云和陈天桥的梦想。
  起点中文网给谁自由?写手。起点一举解决了读者的汇聚、发行的渠道以及付费的方式三个问题,使写手们不再只能依附于一家报纸,拿微薄工资,过清贫生活。
  MegaStudy给谁自由?教师。MegaStudy一举解决了学生的汇聚、视频课程的录制以及便捷的付费三个问题,优秀的教师们再也不用隶属于某个学校,不用再给俞敏洪打工,而可以有独立的品牌和属于自己的学生。
  K68给谁自由?设计师。
苹果的AppStore给谁自由?开发者。Google给谁自由?所有的网络内容生产者。
  
激进一点说,我们正在迎来一个“个体户”的时代。也就是自由创意、独立创业的时代。接下来的问题是:下一个可以被解放的群体在哪里?如何解放他们?如何造就一个可以提供“云服务”的平台?
  记者?医生?律师?会计师?清洁工?保姆?天才?
  如果你想到某个答案,就去干吧。


今天的商品房,就是万历年间的官盐

手头有一张房契,写的是万历十五年七月初四,安徽黄山某居民许先生,在当地买到一别墅,该别墅占地5亩,建有楼房3间,平房28间,连房带地,花去纹银106两。

      明代一亩约有638平方米,5亩就是3190平方米。每间房子约有15平方米,3间楼房加28间平房,就是465平方米。像这样一处别墅,放到今天的北京或上海,没几千万大概买不到吧?即便在黄山,售价也得在300万以上不是?可人家许先生只花了纹银106两。

      106两银子是多少钱呢?还记得万历十五年夏天,安徽米价上涨,每斗米卖到纹银二钱。当时十钱为一两,每斗卖二钱,说明一两银子能买五斗米。而明代一斗约有10.7公升,每公升大米重约1.8斤,所以每斗大米有20斤重,按每斤1.6元的市价,需要花32元购买,买5斗米则需要160元。综上所述,在万历十五年的黄山,一两银子相当于今天160元,106两银子也就是人民币17万左右。放在今天,这点钱甭说买别墅,买别墅里一间厕所都不够。

      我曾经怀疑这位许先生是恶霸地主之流,一贯擅长强买强卖,才能以这么低的价格买到那么大的别墅。后来发现,他也就是一平头百姓,压根儿不具备强买强卖的资格。另外房契上写得明白:"三面议定,时值价银一百陆两整。"说明除了买卖双方,还有中间人帮着估价,而且是按"时值",也就是市场价格。

      由此我想得出第一个结论:万历年间的房价很便宜。

      同样在万历十五年,同样在安徽黄山,人们买一斤盐,却要花三钱银子,按每钱银子折合人民币16元计算,当时每斤盐售价是48元。而今天的加碘食用盐,每斤只卖一块钱。明代的"斤"虽然比今天稍大,但也只有596克,重量相差无几,价格上却差几十倍,明显有些说不过去。所以有人感慨道:"虽有孝子贤孙,少求薄卤以奉其亲,不能得也。"意思是说穷苦老百姓吃不起盐,有时想给爹娘饭菜里放一点盐调调味,却尽不起这个孝心。

      由此我要得出第二个结论:万历年间的盐很贵。

      对于万历年间的房价,我们留待后面再讲,现在不妨探讨一下当时食盐为什么贵的问题。

      据《明史》食货志记载,当时官方向"灶户"(专门负责制盐的农户)收购食盐,每400斤仅支付大米一石。明代一石大米重约190斤,按每斤1.6元计算,一石也就是304元。官方用304元就能买到400斤盐,说明"灶户"生产每斤盐的成本决不会超过一块钱。可是市面上的盐价怎就能暴涨到48元一斤呢?

      ――毛病出在体制上。假设您是万历年间一位老板,想批发些食盐来卖,您必须经过如下程序:

      第一,买下一批粮食,运到边疆军营,从军官手里拿到证明,再回到产盐区,把证明交给盐运司;

      第二,盐运司收到的证明足够多时,会向南京户部申请一批空白"盐引",也就是经销食盐的许可证;

      第三,盐运司在盐引上填写名字,盖上大印,发到你手里;

      第四,你拿着盐引去盐场支盐,然后带着盐车去找盐课司接受检查;

      第五,盐课司检查完毕,告诉你可以在哪个地方销售;

      第六,你去指定的地点卖盐;

      第七,卖完了盐,还要把盐引交给当地zf。

      有必要补充的是,上述程序不但麻烦,而且耗时,不但耗时,而且还要花不少钱。因为明朝公务员待遇奇差,相关部门的福利都不高,就等着从别处捞回报了。你主动送上门去,他们自然要用拖着不办的方式提醒你,直到你主动把白花花的银子送进他们的腰包。据说在万历初年,盐商每进一次货,至少需要两年时间,长的甚至需要五六年。这期间会有多少或明或暗的支出,正史上没有记载,咱们只有展开想象的翅膀。

      由此可见,食盐的生产成本虽然很低,附加在运输和销售环节的成本却是非常惊人的,那些卖盐的老板们吃了这么大的哑巴亏,岂能不将盐价连翻几十个跟头?

      有朋友会说,那时候的老百姓也真够笨的,既然盐商把盐价定得很高,干嘛不甩开盐商,直接去找灶户呢?灶户生产食盐一斤一块钱,咱就给两块,这样灶户赚钱了,咱也能吃到便宜盐。这主意不错,可惜不现实,因为明朝实行非常严格的食盐专卖制度,除了持有许可证的盐商,其他人是不能找灶户买盐的,谁敢触犯这一条,轻则充军,重则砍头,不但砍买家的头,还要砍灶户的头。您要问为什么,明朝的官员会解释道:从盐商那儿买的盐叫官盐,从灶户那儿买的盐叫私盐。官盐贵,却合法;私盐便宜,却不合法。我们怎能做不合法的事儿呢?如果你接着问:为啥官盐合法,私盐就不合法?我猜那些领导会赏你两巴掌。

      其实合法不合法是表面问题,经济利益才是核心所在。在万历后期,明朝国库(太常库)平均每年进账209万两,其中来自食盐专卖的直接收入就占100万两以上。换言之,正是因为人们买了合法的盐,才给国家贡献了将近一半的财政收入。所以国家当然要提倡大家买合法的盐,虽然它比较贵;杜绝大家买非法的盐,虽然它比较便宜。不过这种话不宜明讲。

      适合明讲的是这些话:官盐是受法律保护的,如果吃后出了问题,国家会给你补偿;私盐则不受法律保护,不具备转让、处分和收益的权利,也不能办理过户手续,所以购买风险很大……如果你还左右摇摆,试图冲向盐场去买灶户的便宜盐,那么户部和各地转运使司就会发出通告,将官盐定性为商品盐,将私盐定性为小产权盐,然后警告或者禁止你跟小产权盐打交道,尽管它是那么便宜,而且在质量上和商品盐也没有任何区别。

      现在可以说说万历十五年房价为什么便宜了。原因很简单:那时候的房子全是小产权,而小产权房总是很便宜,一如小产权盐总是很便宜。
  从国家垄断角度来谈,两者确实有相比性。
  古代国家垄断种类较少,一是盐二是铁,西汉就有《盐铁论》,现在国家垄断种类很多,从土地、金融、石油、煤、铁等矿产、通信、燃气、自来水等等。现在的垄断更加广泛而深入。
  作为国家垄断来说,总是能与时俱进的捏准人民的刚性需求,古代就是耕作、吃饭,铁限制农具、炊具、盐限制身体健康。现在社会发展了,就从更高层面、更高需求上来限制了,其实本质一样。