精华内容
下载资源
问答
  • 用photoshop制作电子版签名图片

    万次阅读 2017-02-09 10:38:28
    第一步:PS中打开签名图片 ...在一张空白的纸上签上自己的名字,用扫描仪或拍照...电子印章制作步骤 电子印章制作软件下载 电子印章制作软件使用手册 第二步:截取签名区域 用PS“截取工具”,选取签名区

    from http://www.smartsys.cn/faq-2.html

    第一步:PS中打开签名图片

    在一张空白的纸上签上自己的名字,用扫描仪或拍照,将它储存成*.jpg格式的文件。打开PS 【文件】-【打开】,存储签名的.jpg文件。

     
    电子印章制作步骤 电子印章制作软件下载 电子印章制作软件使用手册

    第二步:截取签名区域

    用PS“截取工具”,选取签名区域,去掉多余的部分,只留下签名区域。

     
    电子印章集成应用图例 电子印章收费标准 电子签章软件用户手册

    第三步:设置签名透明背景

    1、删除背景图层,找到图层对话框,选中背景图层,点击图层删除按钮(红色小方块内)。

    2、删除签名白色区域,左边的工具栏中选择魔术棒工具(红色小方块内),点击签名图片,可以删除背景了,方法有三种:a、Ctrl+D;b、按Delete键;c、在上面菜单栏中选择“编辑”——再选择“剪切”或“清除”。


    电子签章软件试用 电子签章u盾加密锁 数字证书办理 电子印章应用图例

    第四步:保存PGN透明签名图片

    1、图片制作完毕后,就该保存图片了。在文件中找到“存储为”按钮并用鼠标左键单击,或直接按下热键(Shift+Ctrl+S)就可以直接进入存储对话框了。切记将图片保存为PNG格式或GIF格式,不要保存为JPG或BMP格式。

    2、电子签名制作完成后。

    第五步:电子签名应用图例

    电子签名可在电子商务、办公审批、电子合同、公文审批、图纸盖章、报销资料、财务报表等应用中。


    展开全文
  • 文件系统树制作 首先要明白的是“什么是文件系统”,文件系统是对一个存储设备上的数据和元数据进行组织的机制。 这种机制有利于用户和操作系统的交互。 根文件系统之所以在前面加一个”根“,说明它是加载...

     

     根文件系统树制作


    首先要明白的是“什么是文件系统”,文件系统是对一个存储设备上的数据和元数据进行组织的机制。

    这种机制有利于用户和操作系统的交互。

    根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,既然是根的话,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。根文件系统包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在 Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。

     Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用 mount 命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。根文件系统被挂载到根目录下“/”上后,在根目录下就有根文件系统的各个目录,文件:/bin /sbin /mnt等,再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区的各个目录,文件。

     Linux根文件系统中一般有下面的几个目录:

    1. /bin目录

    该目录下的命令可以被root与一般账号所使用,由于这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。

    /bin目录下常用的命令有:cat、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir、[、test等。其中“[”命令就是test命令,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。

    .2. /sbin 目录

    该目录下存放系统命令,即只有系统管理员(俗称最高权限的root)能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统和修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。

    /sbin目录下常用的命令有:shutdown、reboot、fdisk、fsck、init等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。

    3. /dev目录

    该目录下存放的是设备与设备接口的文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。比较重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*等。

     

     

     

     

     

    .4. /etc目录

    该目录下存放着系统主要的配置文件,例如人员的账号密码文件、各种服务的其实文件等。一般来说,此目录的各文件属性是可以让一般用户查阅的,但是只有root有权限修改。对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。

    .5. /lib目录

    该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。

    .6. home目录

    系统默认的用户文件夹,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。

    .7. /root目录

    系统管理员(root)的主文件夹,即是根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。

    .8. /usr目录

    /usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。

    .9. /var目录

    与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。

     

     

     

    10. /proc目录

    这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核

    临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。

    .11. /mnt目录

    用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、移动存储设备等。

    12. /tmp目录

    用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。

    那我们利用Busybox制作根文件系统就是创建这上面的这些目录,和这些目录下面的各种文件。

    对于嵌入式Linux系统的根文件系统来说,一般可能没有上面所列出的那么复杂,比如嵌入式系统通常都不是针对多用户的,所以/home这个目录在一般嵌入式Linux中可能就很少用到,而/boot这个目录则取决于你所使用的BootLoader是否能够重新获得内核映象从你的根文件系统在内核启动之前。一般说来,只有/bin,/dev,/etc,/lib,/proc,/var,/usr这些需要的,而其他都是可选的。

    根文件系统一直以来都是所有类Unix操作系统的一个重要组成部分,也可以认为是嵌入式Linux系统区别于其他一些传统嵌入式操作系统的重要特征,它给 Linux带来了许多强大和灵活的功能,同时也带来了一些复杂性。我们需要清楚的了解根文件系统的基本结构,以及细心的选择所需要的系统库、内核模块和应用程序等,并配置好各种初始化脚本文件,以及选择合适的文件系统类型并把它放到实际的存储设备的合适位置。

    对于嵌入式文件系统的制作和移植而言,它的根文件系统结构基本一样。因此,对同一个根文件系统,通过相应的工具和方法就能容易生成对应文件系统。下面介绍如何制作一个简洁的根文件系统。



    制作根文件系统

    制作根文件系统经常会用到根用户权限,所以需要倍加小心




    tree命令可以以树形结构显示文件目录结构,它非常适合于我们给别人介绍我们的文件目录的组成框架,同时该命令使用适当的参数也可以将命令结果输出到文本文件中。安装tree命令:


     


     



    Dev目录下创建设备文件

     

     

    Var 目录下创建符号链接文件

     

     拷贝交叉编译器中的动态库到相应的目录下

    查看一下自己交叉编译器的路径及*.so*文件

     

    [luxibao@centos fl2440]$ ls

    3rdparty  bootloader  driver  kernel  program  rootfs

    [luxibao@centos fl2440]$ cd kernel/

    [luxibao@centos kernel]$ ls

    linux-3.0  linux-3.0.tar.bz2

    [luxibao@centos kernel]$ cd linux-3.0

    [luxibao@centos linux-3.0]$ ls

    arch           fs       linuxrom-s3c2440.bin  README          usr

    block          include  MAINTAINERS           REPORTING-BUGS  virt

    COPYING        init     Makefile              samples         vmlinux

    CREDITS        ipc      mm                    scripts         vmlinux.o

    crypto         Kbuild   modules.builtin       security

    Documentation  Kconfig  modules.order         sound

    drivers        kernel   Module.symvers        System.map

    firmware       lib      net                   tools

    [luxibao@centos linux-3.0]$ cd /opt/buildroot-2012.08/arm920t/

    [luxibao@centos arm920t]$ ls

    usr

    [luxibao@centos arm920t]$ find -iname "*.so*"

    ./usr/lib/libmpc.so.2.0.0

    ./usr/lib/libgmp.so.10.0.5

    ./usr/lib/libltdl.so.7

    ./usr/lib/libltdl.so.7.2.2

    ./usr/lib/libmpfr.so.4.1.1

    ./usr/lib/libmpc.so.2

    ./usr/lib/libmpfr.so.4

    ./usr/lib/libmpfr.so

    ./usr/lib/libmpc.so

    ./usr/lib/libgmp.so.10

    ./usr/lib/libltdl.so

    ./usr/lib/libgmp.so

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libmudflap.so.0

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libstdc++.so.6.0.14-gdb.py

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libstdc++.so

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libstdc++.so.6.0.14

    省略N行..........................

    ./usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/libdl.so.0

    ./usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/libpthread.so.0

    ./usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/libgcc_s.so.1

    ./usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/libuClibc-0.9.33.2.so

     

     

    [luxibao@centos arm920t]$ cd

    [luxibao@centos ~]$ cat /etc/fstab

     

    #

    # /etc/fstab

    # Created by anaconda on Thu Jul 14 00:24:28 2016

    #

    # Accessible filesystems, by reference, are maintained under '/dev/disk'

    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

    #

    UUID=6f9a4081-5b62-41a8-91a2-4e0193a38eb2 /                       ext4    defaults        1 1

    UUID=ca1f139e-1401-4e65-bd1f-9e298287daaf swap                    swap    defaults        0 0

    tmpfs                   /dev/shm                tmpfs   defaults        0 0

    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

    sysfs                   /sys                    sysfs   defaults        0 0

    proc                    /proc                   proc    defaults        0 0

    拷贝交叉编译器中的动态库到相应的目录下

    [luxibao@centos rootfs]$ cd rootfs/

    [luxibao@centos rootfs]$ ls

    apps  bin  data  dev  etc  info  lib  mnt  proc  root  sbin  sys  tmp  usr  var

    [luxibao@centos rootfs]$ ls lib/

    modules

    [luxibao@centos rootfs]$ cp -af /opt/buildroot-2012.08/arm920t/usr/lib/lib*.so* lib/

    [luxibao@centos rootfs]$ ls lib/

    libgmp.so         libltdl.so        libmpc.so        libmpfr.so        modules

    libgmp.so.10      libltdl.so.7      libmpc.so.2      libmpfr.so.4

    libgmp.so.10.0.5  libltdl.so.7.2.2  libmpc.so.2.0.0  libmpfr.so.4.1.1

    [luxibao@centos rootfs]$ cd lib/

    [luxibao@centos lib]$ ll

    总用量 1024

    lrwxrwxrwx. 1 luxibao luxibao     16 7月  14 23:02 libgmp.so -> libgmp.so.10.0.5

    lrwxrwxrwx. 1 luxibao luxibao     16 7月  14 23:02 libgmp.so.10 -> libgmp.so.10.0.5

    -rwxr-xr-x. 1 luxibao luxibao 488709 7月  14 23:02 libgmp.so.10.0.5

    lrwxrwxrwx. 1 luxibao luxibao     16 7月  14 23:03 libltdl.so -> libltdl.so.7.2.2

    lrwxrwxrwx. 1 luxibao luxibao     16 7月  14 23:03 libltdl.so.7 -> libltdl.so.7.2.2

    -rwxr-xr-x. 1 luxibao luxibao  46306 7月  14 23:03 libltdl.so.7.2.2

    lrwxrwxrwx. 1 luxibao luxibao     15 7月  14 23:04 libmpc.so -> libmpc.so.2.0.0

    lrwxrwxrwx. 1 luxibao luxibao     15 7月  14 23:04 libmpc.so.2 -> libmpc.so.2.0.0

    -rwxr-xr-x. 1 luxibao luxibao  95963 7月  14 23:04 libmpc.so.2.0.0

    lrwxrwxrwx. 1 luxibao luxibao     16 7月  14 23:02 libmpfr.so -> libmpfr.so.4.1.1

    lrwxrwxrwx. 1 luxibao luxibao     16 7月  14 23:02 libmpfr.so.4 -> libmpfr.so.4.1.1

    -rwxr-xr-x. 1 luxibao luxibao 404434 7月  14 23:02 libmpfr.so.4.1.1

    drwxrwxr-x. 3 luxibao luxibao   4096 7月  18 07:47 modules

    Etc 目录下创建一些文件

    创建inittab文件

    [luxibao@centos rootfs]$ cd etc/

    [luxibao@centos etc]$ ls

    dropbear  init.d

    [luxibao@centos etc]$ vim inittab

     

    # /etc/inittab                                                                       

    #

    # Copyright (C) 2011 fulinux <fulinux@gmail.com>

    #

    # Note: BusyBox init doesn't support runlevels.  The runlevels field is

    # completely ignored by BusyBox init. If you want runlevels, use sysvinit.

    #

    # Format for each entry: <id>:<runlevels>:<action>:<process>

    #

    # id        == tty to run on, or empty for /dev/console.

    #              If specified, then /dev/$id device must exist

    # runlevels == ignored, busybox doesn't support it

    # action    == one of sysinit, respawn, askfirst, wait, and once

    # process   == program to run

     

    # Startup the system

    # mount all the file systems specified in /etc/fstab

    ::sysinit:/bin/mount -a

     

    #Use mdev as hotplug to auto mount USB storage or SD card

    ::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug

     

    #Use mdev to auto generate the device node in /dev path

    ::sysinit:/sbin/mdev -s

     

    #make shm, pts support

    ::sysinit:/bin/mkdir -p /dev/pts

    ::sysinit:/bin/mkdir -p /dev/shm

    ::sysinit:/bin/mount -t devpts devpts /dev/pts

     

    #Mount our apps/info partition

    null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock6 /apps

    null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock7 /info

     

    #Set hostname

    null::sysinit:/bin/hostname -F /etc/hostname

     

    #Enable console logon

    null::respawn:/sbin/getty -L ttyS0 115200 vt100

     

    # now run any rc scripts

    null::wait:/etc/init.d/rcS

     

    # system daemon

    null::respawn:/sbin/syslogd -n

    null::respawn:/sbin/klogd -n

     

    # Stuff to do before rebooting

    null::shutdown:/bin/umount /apps

    null::shutdown:/bin/umount /info

    null::shutdown:/bin/killall klogd

    null::shutdown:/bin/killall syslogd

    null::shutdown:/bin/umount -a -r

    #null::shutdown:/sbin/swapoff -a

    "inittab" [] 54L, 1768C已写入  

    创建/etc/init.d/rcS脚本

    [luxibao@centos etc]$ vim init.d/rcS

     

    #!/bin/sh

     

    # Copyright (C) 2011 fulinux <fulinux@gmail.com>

    # Start all init scripts in /etc/init.d

    # executing them in numerical order.

    #

     

    for i in /etc/init.d/S??* ; do

                $i

    Done

     

     

    "init.d/rcS" [] 10L, 218C已写入

    配置网卡的启动脚本

    [luxibao@centos etc]$ vim  init.d/S01_network

     

    #!/bin/sh

     

    ifconfig eth0 192.168.1.111 netmask 255.255.255.0 up

     

     

     

    "init.d/S01_network" [] 3L, 64C已写入

     

    创建支持/apps/etc目录下的启动脚本

    [luxibao@centos etc]$ vim init.d/S99_rcsApp

     

    #!/bin/sh

     

    # Copyright (C) 2011 fulinux <fulinux@gmail.com>

    #

    # Start all init scripts in /apps/etc/init.d

    # executing them in numerical order.

    #

    if (test -d /apps/etc/init.d)

        then

        for i in /apps/etc/init.d/S??* ; do

        $i

        done

    Fi

     

     

    "init.d/S99_rcsApp" [] 13L, 244C已写入

     

    修改init.d目录下的文件权限

    [luxibao@centos etc]$ chmod 777 init.d/*

    [luxibao@centos etc]$ ll init.d/

    总用量 12

    -rwxrwxrwx. 1 luxibao luxibao 218 7月  18 09:49 rcS

    -rwxrwxrwx. 1 luxibao luxibao  64 7月  18 09:50 S01_network

    -rwxrwxrwx. 1 luxibao luxibao 244 7月  18 09:53 S99_rcsApp

     

    创建fstab文件

     

    [luxibao@centos etc]$ vim fstab

     

    # /etc/fstab: static file system information.

    # Copyright (C) 2011 fulinux <fulinux@gmail.com>

    #

    #<File system> <mount pt>     <type>   <options>         <dump> <pass>

    #devpts          /dev/pts       devpts   defaults          0      0

    #/dev/root       /              ext2     rw,noauto         0      1

    proc            /proc          proc     defaults          0      0

    tmpfs           /tmp          tmpfs    defaults          0      0

    tmpfs           /dev          tmpfs    defaults          0      0

    sysfs           /sys           sysfs    defaults          0      0

     

     

    "fstab" [] 10L, 570C已写入

    创建hostname,hosts,TZ文件

    [luxibao@centos etc]$ echo "root" > hostname

    [luxibao@centos etc]$ echo "127.0.0.1      localhost" >> hosts

    [luxibao@centos etc]$ echo "MST7MDT" >> TZ

    [luxibao@centos etc]$ echo "Copyright (C) 2011 fulinux<fulinux@gmail.com>" >> issue    #系统登录时的提示信息

     

    创建profile文件

    [luxibao@centos etc]$ vim profile

     

    # /etc/profile: system-wide .profile file for the Bourne shells.

     

    export PATH=\

    /bin:\

    /sbin:\

    /usr/bin:\

    /usr/sbin:\

    /usr/local/bin:\

    /apps/bin:\

    /apps/tools:\

    /apps/tslib/bin\

     

    # If running interactively, then:

    if [ "$PS1" ]; then

     

       if [ "$BASH" ]; then

            export PS1="[\u@\h \W]\\$ "

            alias ll='/bin/ls --color=tty -laFh'

            alias ls='/bin/ls --color=tty -F'

            export

    LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;

        32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.de

    b=0

        1;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.png=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;

    35

        :*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:

    *.d

        l=01;35:*.xcf=01;35:*.xwd=01;35:';

            else

              if [ "`id -u`" -eq 0 ]; then

                export PS1='>: '

              else

                export PS1='>: '

              fi

             fi

          # System Setting

              set -o vi

              alias  ll='ls -l'

              export USER=`id -un

              export LOGNAME=$USER

              export HOSTNAME=`/bin/hostname`

              export HISTSIZE=1000

              export HISTFILESIZE=1000

              export PAGER='/bin/more '

              export EDITOR='/bin/vi'

              export INPUTRC=/etc/inputrc

              export DMALLOC_OPTIONS=debug=0x34f47d83,inter=100,log=logfile

              export VAR1=

              export VAR2=

              export VAR3=

              export VAR4=

              export VAR5=

              export LD_LIBRARY_PATH=/lib:/usr/lib/

    # QT Extendded 4.4.3 Setting

        export QTDIR=/apps/qt-extended-4.4.3

        export QWS_MOUSE_PROTO='TSLIB:/dev/event0'

        export QWS_DISPLAY='LinuxFB:/dev/fb0'

        export QWS_DISPLAY='LinuxFB:mmWidth240:mmHeight320:0'

        export QWS_SIZE='240x320'

        export QT_PLUGIN_PATH=$QTDIR/plugins/

        export QT_QWS_FONTDIR=$QTDIR/lib/fonts

        export PATH=$QTDIR/bin:$PATH

        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib

    # Touch Scree tslib Setting

        export TSLIB_ROOT=/apps/tslib

        export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

        export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal

        export TSLIB_TSDEVICE=/dev/event0

        export TSLIB_CONSOLEDEVICE=none

        export TSLIB_FBDEVICE=/dev/fb0

    fi;

     

     

    "profile" [] 71L, 2372C已写入  

    创建指定一些协议所使用的端口号文件protocols

    [luxibao@centos etc]$ vim protocols

     

    # /etc/protocols:

    # # $Id: protocols,v 1.1.1.1 2001/09/12 19:03:24 andersee Exp $

    # #

    # # Internet (IP) protocols

    # #

    # #       from: @(#)protocols     5.1 (Berkeley) 4/17/89

    # #

    # #       Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).

    #

    # ip      0       IP              # internet protocol, pseudo protocol number

    # icmp    1       ICMP            # internet control message protocol

    # igmp    2       IGMP            # Internet Group Management

    # ggp     3       GGP             # gateway-gateway protocol

    # ipencap 4       IP-ENCAP        # IP encapsulated in IP (officially ``IP'')

    # st      5       ST              # ST datagram mode

    # tcp     6       TCP             # transmission control protocol

    # egp     8       EGP             # exterior gateway protocol

    # pup     12      PUP             # PARC universal packet protocol

    # udp     17      UDP             # user datagram protocol

    # hmp     20      HMP             # host monitoring protocol

    # xns-idp 22      XNS-IDP         # Xerox NS IDP

    # rdp     27      RDP             # "reliable datagram" protocol

    # iso-tp4 29      ISO-TP4         # ISO Transport Protocol class 4

    # xtp     36      XTP             # Xpress Tranfer Protocol

    # ddp     37      DDP             # Datagram Delivery Protocol

    # idpr-cmtp       39      IDPR-CMTP       # IDPR Control Message Transport

    # rspf    73      RSPF            #Radio Shortest Path First.

    # vmtp    81      VMTP            # Versatile Message Transport

    # ospf    89      OSPFIGP         # Open Shortest Path First IGP

    # ipip    94      IPIP            # Yet Another IP encapsulation

    # encap   98      ENCAP           # Yet Another IP encapsulation

    ~

    ~

    ~

    ~

    "protocols" [] 31L, 1676C已写入

     

    创建mdev.conf文件

    mdev会在/etc目录下找mdev的配置文件: mdev.conf. 如果该文件不存在,那么在执行mdev –s这个命令时,

    会提示找不到mdev.conf,这时我们可以建一个空的mdev.conf文件解决这个问题。下面创建使用mdev自动挂载u盘和SD卡的配置/etc/mdev.conf

     

    [luxibao@centos etc]$ vim mdev.conf

     

    sd[a-z][0-9]      0:0 0777        @(mount /dev/$MDEV /mnt/usb)

    sd[a-z]           0:0 0777        $(umount /mnt/usb)

    ub[a-z][0-9]      0:0 0777        @(mount /dev/$MDEV /mnt/usb)

    ub[a-z]           0:0 0777        $(umount /mnt/usb)

    mmcblk[0-9]p[0-9] 0:0 0777        @(mount /dev/$MDEV /mnt/sdc)

    mmcblk[0-9]       0:0 0777        $(umount /mnt/sdc)

     

     

    "mdev.conf" [] 6L, 348C已写入

     

     

    创建用户组group文件

    [luxibao@centos etc]$ vim group

     

    root:x:0:root

     

     

    "group" [] 1L, 14C已写入

     

    它的格式如下:

     

    groupname:password:gid:members

     

    第一个字段为用户组名称

    第二个字段为用户组密码,当为x时密码是映射到/etc/gshadow中的,是非逆的

    第三个字段为GID,及组号,为正整数或0,0被付于了root用户组;系统通常会预留一些较靠前的GID给系统虚拟用户之用,每个系统预留的GID都不同,Fedora预留了500个,所以我们添加新用户组时是从500开始的。GID的范围由/etc/login.defs中的GID_MIN和GID_MAX决定

    第四个字段为用户列表,每个用户间用逗号分隔

     

    这里的password代表组口令,很少用到。它可使原先不在这个群组中的用户可以通过newgrp命令暂时继承该组的权限,使用 newgrp命令时会新开一个shell。口令的加密方式和passwd文件中的口令一样,所以如果需设置组口令,要用passwd程序虚设一个用户,再把该用户password节中的加密口令拷贝到/etc/group文件中。members列代表组成员,我们可把需加入该组的用户以逗号分隔添加到这里即可。同一组的成员可继承该组所拥有的权限。

     

    创建用户passwd文件

    [luxibao@centos etc]$ vim passwd

    root:x:0:0:root:/:/bin/sh

    "passwd" [] 1L, 26C已写入

     

    它的格式如下:

    username:password:uid:gid:gecos:homedir:shell

     

    第一个字段为登录名

    第二个字段为口令,一般被映射到shadow文件中

    第三个字段为UID

    第四个字段为GID

    第五个字段为用户名全称,gecos是通用电子计算机操作系统的缩写,是Bell实验室中的一台大型主机。

    第六个字段为用户根目录

    第七个字段为用户所用SHELL的类型

     

    Unix系统最初是用明文保存密码的,后来由于安全的考虑,采用crypt()算法加密密码并存放在/etc/passwd文件。现在,由于计算机处理能力的提高,使密码破解变得越来越容易。/etc/passwd文件是所有合法用户都可访问的,大家都可互相看到密码的加密字符串,这给系统带来很大的安全威胁。现代的Unix系统使用影子密码系统,它把密码从/etc/pa sswd文件中分离出来,真正的密码保存在/etc/shadow文件中,shadow文件只能由超级用户访问。这样入侵者就不能获得加密密码串,用于破解。使用shadow密码文件后,/etc/passwd文件中所有帐户的password域的内容为"x",如果password域的内容为"*",则该帐号被停用。使用passwd这个程序可修改用户的密。

     

     

    创建密码映射shadow文件

    这里我们设置为不用密码登陆,将password格式的内容清空:

     

    [luxibao@centos rootfs]$ vim etc/shadow

     

    root::0:0:99999:7:::

    ~

    ~

    ~

    "etc/shadow" [] 1L, 21C已写入

     

     

    在文件系统中安装busybox

    [luxibao@centos rootfs]$ cd

    [luxibao@centos ~]$ ls

    fl2440  公共的  模板  视频  图片  文档  下载  音乐  桌面

    [luxibao@centos ~]$ cd fl2440/

    [luxibao@centos fl2440]$ ls

    3rdparty  bootloader  driver  kernel  program  rootfs

    [luxibao@centos fl2440]$ cd 3rdparty/

    [luxibao@centos 3rdparty]$ ls

    [luxibao@centos 3rdparty]$ rz

    rz waiting to receive.

    Starting zmodem transfer.  Press Ctrl+C to cancel.

    Transferring busybox-1.20.2.tar.bz2...

      100%    2135 KB 2135 KB/s 00:00:01       0 Errors

     

    ?[luxibao@centos 3rdparty]$ ls

    busybox-1.20.2.tar.bz2

    [luxibao@centos 3rdparty]$ tar xjf busybox-1.20.2.tar.bz2

    [luxibao@centos 3rdparty]$ ls

    busybox-1.20.2  busybox-1.20.2.tar.bz2

    [luxibao@centos 3rdparty]$ cd busybox-1.20.2

     

    [luxibao@centos busybox-1.20.2]$ vim Makefile

     

    #修改CROSS_COMPILER为:

    CROSS_COMPILE ?= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-

     

    [luxibao@centos6 busybox-1.20.2]$ ls ../../rootfs/rootfs/

    apps  bin  data  dev  etc  info  lib  mnt  proc  root  sbin  sys  tmp  usr  var

     

    [luxibao@centos6 busybox-1.20.2]$ make menuconfig

    #选择:

      Busybox Settings  --->

           General Configuration  --->

                 [*] Don't use /usr

           Installation Options ("make install" behavior)  --->

                 What kind of applet links to install (as soft-links)  --->

    (home/luxibao/fl2440/rootfs/rootfs/) BusyBox installation prefix

     

    #其他选项结合和自己的需求定制

     

    [luxibao@centos6 busybox-1.20.2]$ make

     

    [luxibao@centos busybox-1.20.2]$  file busybox

    busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped

    [luxibao@centos busybox-1.20.2]$ sudo make install

     

     /home/luxibao/fl2440/rootfs/rootfs//bin/[ -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/[[ -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/add-shell -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/addgroup -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/adduser -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/arping -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/ash -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/awk -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/base64 -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/basename -> busybox

      /home/luxibao/fl2440/rootfs/rootfs//bin/beep -> busybox

    省略N行............................

      /home/luxibao/fl2440/rootfs/rootfs//sbin/udhcpd -> ../bin/busybox

      /home/luxibao/fl2440/rootfs/rootfs//sbin/vconfig -> ../bin/busybox

      /home/luxibao/fl2440/rootfs/rootfs//sbin/watchdog -> ../bin/busybox

      /home/luxibao/fl2440/rootfs/rootfs//sbin/zcip -> ../bin/busybox

     

     

    --------------------------------------------------

    You will probably need to make your busybox binary

    setuid root to ensure all configured applets will

    work properly.

    --------------------------------------------------

     

    [luxibao@centos busybox-1.20.2]$ ls

    applets                 Config.in      include     Makefile.custom  scripts

    applets_sh              configs        init        Makefile.flags   selinux

    arch                    console-tools  _install    Makefile.help    shell

    archival                coreutils      INSTALL     miscutils        sysklogd

    AUTHORS                 debianutils    libbb       modutils         testsuite

    busybox                 docs           libpwdgrp   networking       TODO

    busybox.links           e2fsprogs      LICENSE     printutils       TODO_unicode

    busybox_unstripped      editors        loginutils  procps           util-linux

    busybox_unstripped.map  examples       mailutils   README

    busybox_unstripped.out  findutils      Makefile    runit

    [luxibao@centos busybox-1.20.2]$ cd ../

    [luxibao@centos 3rdparty]$ cd ../

    [luxibao@centos fl2440]$ cd rootfs

    [luxibao@centos rootfs]$ cd rootfs/

    [luxibao@centos rootfs]$ ls

    apps  data  etc   init  linuxrc  proc  sbin  tmp  var

    bin   dev   info  lib   mnt      root  sys   usr

     

    移植dropbear

    首先编译生成PC版的,在制作密钥时用到

    [luxibao@centos ~]$ wget http://matt.ucc.asn.au/dropbear/releases/dropbear-0.53.1.tar.bz2

     

    [luxibao@centos ~]$ tar -xjf dropbear-0.53.1.tar.bz2

     

    [luxibao@centos ~]$ cd dropbear-0.53.1

    [luxibao@centos dropbear-0.53.1]$./configure && make

     

    生成的文件:

        dropbear: ssh2 server

        dropbearkey: 密钥生成器

        dropbearconvert: 可以转换openssh的密钥

    dbclient: ssh2 client

     

    [luxibao@centos dropbear-0.53.1]$ ./dropbearkey -t rsa -f /home/luxibao/fl2440/rootfs/rootfs/etc/dropbear/dropbear_rsa_host_key

    Will output 1024 bit rsa secret key to '/home/luxibao/fl2440/rootfs/rootfs/etc/dropbear/dropbear_rsa_host_key'

    Generating key, this may take a while...

    Public key portion is:

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgkz1a393mku4JXzyW4T014jxqQfcnuFAApQTEwRhDle3gTKNFORfoS3rJUc0ENjwwxu4VyDzsgAjrILGuP9t0tVn9oM+O0j10OyNTRY9sDXzupBguxIFruG39uUU8VSxHm+/w0j6hqGlxzwI7PEV/nlU2iv2maoZuhDceRhrM5ny1r8= luxibao@centos.6localdomain

    Fingerprint: md5 6b:25:d5:fa:b7:10:3b:2b:46:e2:c1:cf:59:28:f7:a9

     

    [luxibao@centos dropbear-0.53.1]$ ./dropbearkey -t dss -f /home/luxibao/fl2440/rootfs/rootfs/etc/dropbear/dropbear_dss_host_key

    Will output 1024 bit dss secret key to '/home/luxibao/fl2440/rootfs/rootfs/etc/dropbear/dropbear_dss_host_key'

    Generating key, this may take a while...

    Public key portion is:

    ssh-dss AAAAB3NzaC1kc3MAAACBAJG3OxxJZ1J8GMHvJrSPPHkoauydPmpBGsBscQWiVfC8d4lURbdOFDfh2rQe6ZEjizjoV+OOKhg3S8SWOp0R55Am0cwpeB8XJaV3iWZwldx/JrcqRVZDjXIrryEtrFTSpHkkSNsivUTRnuzcakq+/Dxhw5rC/ahrs5cCvabgQNbfAAAAFQDHmVLiFI05ZA6rcTTOJuZv3OCTawAAAIBNL2GAnd7eaigPrgUqAKkQ4jUhDywk86+RHTSfls6V5hlOtWF5g8mB6USqbO7fBd1P3ckD9SpE8XCD2lkmYBevJtNr/p+4Cuz57NlS4sN9cy9RVdDbuAaUdXV7FffenR7rhl0KSeoXtMx0QYOcHKHnifN9A+j1seWBK4AsDzAcXQAAAIBKVUH0erG2LMhDgK6maxDkeHkJe6LX8aT5uQSV9bv1ftQst0BD0nChe+00ZyldS8m1qu+aBbtEoPpmZ9UnQiu5aE+jurF4wzflLqi+brb09McZZqGtKFIlLs4mibv11c3T0dQAIapE90Y32i29I/p6ULE7KHUy++U4pYXCXJ61YQ== luxibao@centos.6localdomain

    Fingerprint: md5 cd:eb:06:06:7d:6c:60:90:a3:23:60:a1:6a:09:f8:31

     

    [luxibao@centos dropbear-0.53.1]$ chmod 666 /home/luxibao/fl2440/rootfs/rootfs/etc/dropbear/dropbear_*

     

     

    编译ARM版本的

     

    [luxibao@centos dropbear-0.53.1]$ make  distclean

     

    [luxibao@centos dropbear-0.53.1]$ ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --build=i686 --host=arm-linux --disable-zlib

     

    [luxibao@centos dropbear-0.53.1]$ make

     

    [luxibao@centos dropbear-0.53.1]$ file dropbear

    dropbear: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

    [luxibao@centos dropbear-0.53.1]$  file dbclient

    dbclient: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

    [luxibao@centosdropbear-0.53.1]$  /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip dropbear

    [luxibao@centos dropbear-0.53.1]$ mv dbclient ssh

    [luxibao@centos dropbear-0.53.1]$ /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip ssh

    [luxibao@centos dropbear-0.53.1]$ cp dropbear ssh /home/luxibao/fl2440/rootfs/rootfs/usr/sbin/

     

    在文件系统中创建启动脚本

    [luxibao@centos rootfs]$ vim etc/init.d/S04_dropbear

     

    #!/bin/sh

    /usr/sbin/dropbear

    [luxibao@centos rootfs]$ chmod 777 etc/init.d/S04_dropbear

    [luxibao@centos rootfs]$ ls

    apps  bin  data  dev  etc  info  init  lib  linuxrc  mnt  proc  root  sbin  sys  tmp  usr  var

     

    * 在开发板中移植上面制作的根文件系统后的截图如下所示:


     

    对根文件系统进行修改

    由于制作initramfs文件系统启动时会在根文件系统中执行第一个init程序,它对uboot传过来的参数init=/linuxrc不予理睬,所以需要在上面制作的根文件系统里的根目录加入init程序,否则无法启动。init程序和linuxrc程序一样都是符号链接文件,它们都是指向/bin/busybox程序。

     

     

    [luxibao@centos6 rootfs]$ ln -s bin/busybox init

    [luxibao@centos rootfs]$ ll

    总用量 60

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 07:47 apps

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 12:15 bin

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 07:47 data

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 07:55 dev

    drwxrwxr-x. 4 luxibao luxibao 4096 7月  18 10:31 etc

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 07:47 info

    lrwxrwxrwx. 1 luxibao luxibao   11 7月  18 11:57 init -> bin/busybox

    drwxrwxr-x. 3 luxibao luxibao 4096 7月  18 09:21 lib

    lrwxrwxrwx. 1 root    root      11 7月  18 12:15 linuxrc -> bin/busybox

    drwxrwxr-x. 6 luxibao luxibao 4096 7月  18 07:47 mnt

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 07:47 proc

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 07:47 root

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 12:15 sbin

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 07:47 sys

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 07:47 tmp

    drwxrwxr-x. 6 luxibao luxibao 4096 7月  18 07:47 usr

    drwxrwxr-x. 2 luxibao luxibao 4096 7月  18 08:04 var

     

    添加内核对initramfs的支持

    [luxibao@centos fl2440]$ ls

    3rdparty  bootloader  driver  kernel  program  rootfs

    [luxibao@centos fl2440]$ cd kernel/

    [luxibao@centos kernel]$ ls

    linux-3.0  linux-3.0.tar.bz2

    [luxibao@centos kernel]$ cd linux-3.0

    [luxibao@centos linux-3.0]$ export TERM=vt100

    [luxibao@centos linux-3.0]$ make menuconfig

     

    。 。 。 。 。 。

    General setup  --->
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
    (/home/luxibao/fl2440/rootfs/rootfs) Initramfs source file(s)   #输入根文件系统的所在目录 

     。 。 。 。 。

     

     

    [luxibao@centos linux-3.0]$ ls

    arch           drivers   Kbuild                Makefile         README          System.map

    block          firmware  Kconfig               mm               REPORTING-BUGS  tools

    COPYING        fs        kernel                modules.builtin  samples         usr

    CREDITS        include   lib                   modules.order    scripts         virt

    crypto         init      linuxrom-s3c2440.bin  Module.symvers   security        vmlinux

    Documentation  ipc       MAINTAINERS           net              sound           vmlinux.o

     

    [luxibao@centos linux-3.0]$  du -h  linuxrom-s3c2440.bin

    6.7M    linuxrom-s3c2440.bin

    [luxibao@centos linux-3.0]$ mv linuxrom-s3c2440.bin /tftp/

     

    制作映像文件

    添加ubootinitramfs支持

    Uboot源码基本上不做修改。

    下面对uboot进行修改。

     

    U-Boot 2010.09 (Jul 17 2016 - 19:56:41)

     

    DRAM:  64 MiB

    NAND:  256 MiB

    In:    serial

    Out:   serial

    Err:   serial

    Net:   dm9000

    Hit any key to stop autoboot:  0

    [fl2440@lingyun]# set bkr 'tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 8000000;nand write 30008000 100000 800000'

    [fl2440@lingyun]# set bootcmd_initramdisk 'nand read 30008000 100000 800000;bootm 30008000'

    [fl2440@lingyun]#  set bootargs 'console=ttyS0,115200 mem=64M init=/linuxrc rw loglevel=7'

    [fl2440@lingyun]# set bootcmd 'run bootcmd_initramdisk'

    [fl2440@lingyun]#  save

    Saving Environment to NAND...

    Erasing Nand...

    Erasing at 0x60000 -- 100% complete.

    Writing to Nand... done

    [fl2440@lingyun]# pri

    bbl=tftp 30008000 u-boot-s3c2440.bin;nand erase 0 100000;nand write 30008000 0 40000

    blx=tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 F00000;nand write 30008000 100000 F00000

    tb=tftp 30008000 linuxrom-s3c2440.bin; bootm 30008000

    bootdelay=2

    baudrate=115200

    ethaddr=08:00:3e:26:0a:51

    ipaddr=192.168.1.168

    serverip=192.168.1.2

    netmask=255.255.255.0

    ethact=dm9000

    stdin=serial

    stdout=serial

    stderr=serial

    bkr=tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 8000000;nand write 30008000 100000 800000

    bootcmd_initramdisk=nand read 30008000 100000 800000;bootm 30008000

    bootargs=console=ttyS0,115200 mem=64M init=/linuxrc rw loglevel=7

    bootcmd=run bootcmd_initramdisk

     

    Environment size: 675/131068 bytes

    [fl2440@lingyun]# run bkr

    dm9000 i/o: 0x20000300, id: 0x90000a46

    DM9000: running in 16 bit mode

    MAC: 08:00:3e:26:0a:51

    could not establish link

    operating at 100M full duplex mode

    Using dm9000 device

    TFTP from server 192.168.1.2; our IP address is 192.168.1.168

    Filename 'linuxrom-s3c2440.bin'.

    Load address: 0x30008000

    Loading: #################################################################

             #################################################################

             #################################################################

             #################################################################

             #################################################################

             #################################################################

             #################################################################

             #####################

    done

    Bytes transferred = 6975480 (6a6ff8 hex)

     

    NAND erase: device 0 offset 0x100000, size 0x8000000

    Skipping bad block at  0x00d20000                                          

    Skipping bad block at  0x03360000                                          

    Erasing at 0x80e0000 -- 100% complete.

    OK

     

    NAND write: device 0 offset 0x100000, size 0x800000

     8388608 bytes written: OK

     

    启动引导

    [fl2440@lingyun]#  boot

     

    NAND read: device 0 offset 0x100000, size 0x800000

     8388608 bytes read: OK

    ## Booting kernel from Legacy Image at 30008000 ...

       Image Name:   Linux Kernel

       Created:      2016-07-18   6:55:33 UTC

       Image Type:   ARM Linux Kernel Image (uncompressed)

       Data Size:    6975416 Bytes = 6.7 MiB

       Load Address: 30008040

       Entry Point:  30008040

       Verifying Checksum ... OK

       Loading Kernel Image ... OK

    OK

     

    Starting kernel ...

     

    Uncompressing Linux... done, booting the kernel.

    Linux version 3.0.0 (luxibao@centos.6localdomain) (gcc version 4.5.4 (Buildroot 2012.08) ) #3 Mon Jul 18 14:55:10 CST 2016

    CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

    CPU: VIVT data cache, VIVT instruction cache

    Machine: SMDK2440

    Memory policy: ECC disabled, Data cache writeback

    CPU S3C2440A (id 0x32440001)

    S3C24XX Clocks, Copyright 2004 Simtec Electronics

    S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz

    CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on

    Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256

    Kernel command line: console=ttyS0,115200 mem=64M init=/linuxrc rw loglevel=7

    PID hash table entries: 256 (order: -2, 1024 bytes)

    Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)

    Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)

    Memory: 64MB = 64MB total

    Memory: 46268k/46268k available, 19268k reserved, 0K highmem

    Virtual kernel memory layout:

        vector  : 0xffff0000 - 0xffff1000   (   4 kB)

        fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)

        DMA     : 0xffc00000 - 0xffe00000   (   2 MB)

        vmalloc : 0xc4800000 - 0xf6000000   ( 792 MB)

        lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)

        modules : 0xbf000000 - 0xc0000000   (  16 MB)

          .init : 0xc0008000 - 0xc0e0e000   (14360 kB)

          .text : 0xc0e0e000 - 0xc11e1000   (3916 kB)

          .data : 0xc11e2000 - 0xc1204800   ( 138 kB)

           .bss : 0xc1204824 - 0xc1234a60   ( 193 kB)

    SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

    NR_IRQS:85

    irq: clearing pending ext status 00080800

    irq: clearing pending ext status 00000800

    irq: clearing subpending status 00000003

    irq: clearing subpending status 00000002

    Console: colour dummy device 80x30

    console [ttyS0] enabled

    Calibrating delay loop... 201.52 BogoMIPS (lpj=503808)

    pid_max: default: 32768 minimum: 301

    Mount-cache hash table entries: 512

    CPU: Testing write buffer coherency: ok

    gpiochip_add: gpios 288..303 (GPIOK) failed to register

    gpiochip_add: gpios 320..334 (GPIOL) failed to register

    gpiochip_add: gpios 352..353 (GPIOM) failed to register

    NET: Registered protocol family 16

    S3C Power Management, Copyright 2004 Simtec Electronics

    S3C2440: Initialising architecture

    S3C2440: IRQ Support

    S3C244X: Clock Support, DVS off

    usbcore: registered new interface driver usbfs

    usbcore: registered new interface driver hub

    usbcore: registered new device driver usb

    s3c-i2c s3c2440-i2c: slave address 0x10

    s3c-i2c s3c2440-i2c: bus frequency set to 98 KHz

    s3c-i2c s3c2440-i2c: i2c-0: S3C I2C adapter

    Advanced Linux Sound Architecture Driver Version 1.0.24.

    Bluetooth: Core ver 2.16

    NET: Registered protocol family 31

    Bluetooth: HCI device and connection manager initialized

    Bluetooth: HCI socket layer initialized

    cfg80211: Calling CRDA to update world regulatory domain

    NET: Registered protocol family 2

    IP route cache hash table entries: 1024 (order: 0, 4096 bytes)

    TCP established hash table entries: 2048 (order: 2, 16384 bytes)

    TCP bind hash table entries: 2048 (order: 1, 8192 bytes)

    TCP: Hash tables configured (established 2048 bind 2048)

    TCP reno registered

    UDP hash table entries: 256 (order: 0, 4096 bytes)

    UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)

    NET: Registered protocol family 1

    RPC: Registered named UNIX socket transport module.

    RPC: Registered udp transport module.

    RPC: Registered tcp transport module.

    RPC: Registered tcp NFSv4.1 backchannel transport module.

    NetWinder Floating Point Emulator V0.97 (extended precision)

    JFFS2 version 2.2. (NAND) (SUMMARY)  2001-2006 Red Hat, Inc.

    ROMFS MTD (C) 2007 Red Hat, Inc.

    msgmni has been set to 90

    Console: switching to colour frame buffer device 60x53

    fb0: s3c2410fb frame buffer device

    s3c2440-uart.0: ttyS0 at MMIO 0x50000000 (irq = 70) is a S3C2440

    s3c2440-uart.1: ttyS1 at MMIO 0x50004000 (irq = 73) is a S3C2440

    s3c2440-uart.2: ttyS2 at MMIO 0x50008000 (irq = 76) is a S3C2440

    S3C24XX NAND Driver, (c) 2004 Simtec Electronics

    s3c24xx-nand s3c2440-nand: Tacls=3, 29ns Twrph0=7 69ns, Twrph1=3 29ns

    s3c24xx-nand s3c2440-nand: NAND soft ECC

    NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)

    Scanning device for bad blocks

    Bad eraseblock 105 at 0x000000d20000

    Bad eraseblock 411 at 0x000003360000

    Bad eraseblock 1048 at 0x000008300000

    Bad eraseblock 1392 at 0x00000ae00000

    Bad eraseblock 1789 at 0x00000dfa0000

    Creating 6 MTD partitions on "NAND":

    0x000000000000-0x000000100000 : "mtdblock0 u-boot 1MB"

    0x000000100000-0x000001000000 : "mtdblock1 kernel 15MB"

    0x000001000000-0x000005000000 : "mtdblock2 rootfs 64MB"

    0x000005000000-0x00000a000000 : "mtdblock3 apps 80MB"

    0x00000a000000-0x00000d000000 : "mtdblock4 data 48MB"

    0x00000d000000-0x000010000000 : "mtdblock5 backup 48MB"

    dm9000 Ethernet Driver, V1.31

    ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver

    s3c2410-ohci s3c2410-ohci: S3C24XX OHCI

    s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1

    s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000

    hub 1-0:1.0: USB hub found

    hub 1-0:1.0: 2 ports detected

    usbcore: registered new interface driver libusual

    s3c2410_udc: debugfs dir creation failed -19

    mousedev: PS/2 mouse device common for all mice

    S3C24XX RTC, (c) 2004,2006 Simtec Electronics

    i2c /dev entries driver

    S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics

    s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled

    sdhci: Secure Digital Host Controller Interface driver

    sdhci: Copyright(c) Pierre Ossman

    usbcore: registered new interface driver usbhid

    usbhid: USB HID core driver

    ALSA device list:

      No soundcards found.

    TCP cubic registered

    NET: Registered protocol family 17

    lib80211: common routines for IEEE802.11 drivers

    Registering the dns_resolver key type

    drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

    Warning: unable to open an initial console.

    Freeing init memory: 14360K

    usb 1-1: new full speed USB device number 2 using s3c2410-ohci

    usb 1-1: device descriptor read/64, error -62

    usb 1-1: device descriptor read/64, error -62

    usb 1-1: new full speed USB device number 3 using s3c2410-ohci

    usb 1-1: device descriptor read/64, error -62

    usb 1-1: device descriptor read/64, error -62

    usb 1-1: new full speed USB device number 4 using s3c2410-ohci

    usb 1-1: device not accepting address 4, error -62

    usb 1-1: new full speed USB device number 5 using s3c2410-ohci

    usb 1-1: device not accepting address 5, error -62

    hub 1-0:1.0: unable to enumerate USB device on port 1

     

    Copyright (C) 2016 Reagan

    root login: root

    Password:

    >: ls

    apps     data     etc      init     linuxrc  proc     sbin     tmp      var

    bin      dev      info     lib      mnt      root     sys      usr

     

    这样initramfs文件系统就制作成功

     

     

     

    initramfs文件系统制作过程中遇到的问题和解决方法:

     

     

    1.拷贝交叉编译器中的动态库时路径出错,查看一下自己交叉编译器的*.so*文件是查找不完全:


     

     

    解决:找到正确路径,用find -iname "*.so*"命令查找可以查找完全

    [luxibao@centos fl2440]$ ls

    3rdparty  bootloader  driver  kernel  program  rootfs

    [luxibao@centos fl2440]$ cd kernel/

    [luxibao@centos kernel]$ ls

    linux-3.0  linux-3.0.tar.bz2

    [luxibao@centos kernel]$ cd linux-3.0

    [luxibao@centos linux-3.0]$ ls

    arch           fs       linuxrom-s3c2440.bin  README          usr

    block          include  MAINTAINERS           REPORTING-BUGS  virt

    COPYING        init     Makefile              samples         vmlinux

    CREDITS        ipc      mm                    scripts         vmlinux.o

    crypto         Kbuild   modules.builtin       security

    Documentation  Kconfig  modules.order         sound

    drivers        kernel   Module.symvers        System.map

    firmware       lib      net                   tools

    [luxibao@centos linux-3.0]$ cd /opt/buildroot-2012.08/arm920t/

    [luxibao@centos arm920t]$ ls

    usr

    [luxibao@centos arm920t]$ find -iname "*.so*"

    ./usr/lib/libmpc.so.2.0.0

    ./usr/lib/libgmp.so.10.0.5

    ./usr/lib/libltdl.so.7

    ./usr/lib/libltdl.so.7.2.2

    ./usr/lib/libmpfr.so.4.1.1

    ./usr/lib/libmpc.so.2

    ./usr/lib/libmpfr.so.4

    ./usr/lib/libmpfr.so

    ./usr/lib/libmpc.so

    ./usr/lib/libgmp.so.10

    ./usr/lib/libltdl.so

    ./usr/lib/libgmp.so

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libmudflap.so.0

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libstdc++.so.6.0.14-gdb.py

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libstdc++.so

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libstdc++.so.6.0.14

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libmudflap.so

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libgcc_s.so

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libmudflapth.so.0.0.0

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libmudflap.so.0.0.0

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libmudflapth.so.0

    ./usr/arm-unknown-linux-uclibcgnueabi/lib/libmudflapth.so

    省略N行.....................

    ./usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/libdl.so.0

    ./usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/libpthread.so.0

    ./usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/libgcc_s.so.1

    ./usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/libuClibc-0.9.33.2.so

     

    2.没有转换目录。


     

    解决:  将[luxibao@centos etc]$ vim etc/shadow

         改为[luxibao@centos rootfs]$ vim etc/shadow

     

    3. [luxibao@centos busybox-1.20.2]$ ls ../../rootfs/rootfs/

    apps  bin  data  dev  etc  info  lib  mnt  proc  root  sbin  sys  tmp  usr  var

    没有init和linuxrc 文件

    解决:3.1   [luxibao@centos ~]$  ln -s bin/busybox init

    3.2

    #选择:

      Busybox Settings  --->

           General Configuration  --->

                 [*] Don't use /usr

           Installation Options ("make install" behavior)  --->

                 What kind of applet links to install (as soft-links)  --->

    (home/luxibao/fl2440/rootfs/rootfs/) BusyBox installation prefix(改对路径)


    4.[luxibao@centos busybox-1.20.2]$ ln -s bin/busybox init   路径弄错。


     

    解决:用sudo权限删除掉busybox-1.20.2文件夹 重新做busybox-1.20.2.tar.bz2解压和安装busybox

    5.[luxibao@centos dropbear-0.53.1]$ /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip ssh

    /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip: 'ssh': No such file

     

    解决:[luxibao@centos dropbear-0.53.1]$ mv dbclient ssh

    [luxibao@centos drop


     

    解决:  将[luxibao@centos etc]$ vim etc/shadow

         改为[luxibao@centos rootfs]$ vim etc/shadow

     

    3. [luxibao@centos busybox-1.20.2]$ ls ../../rootfs/rootfs/

    apps  bin  data  dev  etc  info  lib  mnt  proc  root  sbin  sys  tmp  usr  var

    没有init和linuxrc 文件

    解决:3.1   [luxibao@centos ~]$  ln -s bin/busybox init

    3.2

    #选择:

      Busybox Settings  --->

           General Configuration  --->

                 [*] Don't use /usr

           Installation Options ("make install" behavior)  --->

                 What kind of applet links to install (as soft-links)  --->

    (home/luxibao/fl2440/rootfs/rootfs/) BusyBox installation prefix(改对路径)


    4.[luxibao@centos busybox-1.20.2]$ ln -s bin/busybox init   路径弄错。

     

    解决:用sudo权限删除掉busybox-1.20.2文件夹 重新做busybox-1.20.2.tar.bz2解压和安装busybox

    5.[luxibao@centos dropbear-0.53.1]$ /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip ssh

    /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip: 'ssh': No such file

     

    解决:[luxibao@centos dropbear-0.53.1]$ mv dbclient ssh

    [luxibao@centos dropbear-0.53.1]$ /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip ssh

    展开全文
  • 完成了u-boot移植后就是内核移植然后是根文件系统制作,这次分为三部分书写:根文件制作之init、jaffs2、ubifs

    完成了u-boot移植后就是内核移植然后是根文件系统制作,这次分为这几部分书写:根文件系统树、文件系统initramfs、jaffs2、ubifs

    有必要了解一些存储系统和文件系统的知识



    NorflashNandflash的对比:

      

    (1)闪存芯片读写的基本单位不同

       应用程序对NorFlash芯片操作以“字”为基本单位.为了方便对大容量NorFlash闪存的管理,通常将NOR闪存分成大小为128KB64KB的逻辑块,有时块内还分扇区.读写时需要同时指定逻辑块号和块内偏移.应用程序对NandFlash芯片操作是以“块”为基本单位.NAND闪存的块比较小,一般是8KB,然后每块又分成页,页大小一般是512字节.要修NandFlash芯片中一个字节,必须重写整个数据块.

    (2)文件系统比较  

           Linux系统中采用MTD来管理不同类型的Flash芯片,包括NandFlashNorFlash.支持在Flash上运行的常用文件系统有cramfsjffsjffs2yaffsyaffs2.cramfs文件系统是只读文件系统.如果想在Flash上实现读写操作通常在NorFlash上我们会选取jffsjffs2文件系统,在NandFlash上选用yaffsyaffs2文件系.Yaffs2文件系统支持大页(大于512字节/)NandFlash存储器

    其实还有很多不同,但我认为在制作过程中这两点不同值得注意。其他的请自行百度咯!!!





    基于RAM的文件系统

    很多,只说initramfs,jaffs2,ubifs

     initramfs在编译内核的同时被编译并与内核生成一个映像文件,可以压缩也可以不压缩,但是目前只支持cpio包格式。它是根文件系统制作和制作的一种非常简单的方法,也可以通过执行这个文件系统中的程序引导真正的文件系统,这样加载根文件系统的工作就不是内核的工作,而是initramfs的工作。由于initramfs使用cpio包格式,所以很容易将一个单一的文件、目录、node编译链接到系统中去,这样很简单的系统中使用起来很方便,不需要另外挂接文件系统。

       JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2(Journalling Flash FileSystem v2日志闪存文件系统版本2 )RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所JFFS2也可以用在Linux, uCLinux中。它主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。Jffs2不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs2为维护日志节点所占用的内存空间迅速增大,另外,jffs2文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。

      无排序区块图像文件系统(Unsorted Block Image File System, UBIFS)是用于固态硬盘存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件系统之一。真正开始开发于2007年,并于200810月第一次加入稳定版本于Linux核心2.6.27版。UBIFS最早在2006年由IBMNokia的工程师Thomas GleixnerArtem Bityutskiy所设计,专门为了解决MTDMemory Technology Device)设备所遇到的瓶颈。由于Nand Flash容量的暴涨,YAFFS等皆无法再去控制Nand Flash的空间。UBIFS通过子系统UBI处理与MTD device之间的动作。与JFFS2一样,UBIFS建构于MTD device之上,因而与一般的block device不兼容。

    JFFS2运行在MTD设备之上,而UBIFS则只能工作于UBI volume之上。


    接下来开始制作根文件系统树(我喜欢将rootfs打成roofts,下面就不做解释了)

    mkdir roofts

    mkdir -p

    {apps,bin,data,dev,info,proc,root,sbin,sys,tmp,var,etc/{,init.d,dropbear},mnt/{,usb,sdc,nfs,dev},usr/{,bin,sbin,lib,share},lib/{,modules/{,3.0.0}}}


    后面的rootfs-ubifs.bin,init,linuxrc都是自己做好了放到里面,这里只是展示执行了上面的命令后生成了哪些文件。

     Dev目录下创建设备文件

     sudo mknod -m666 dev/null c 1 3

     sudo mknod -m666 dev/console c 5 1

    sudo mknod -m666 dev/ttyS0 c 4 6 64

    sudo mknod dev/mtdblock0 b 31 0

    sudo mknod dev/mtdblock1 b 31 1

    sudo mknod dev/mtdblock2 b 31 2

    sudo mknod dev/mtdblock3 b 31 3

    sudo mknod dev/mtdblock4 b 31 4

    sudo mknod dev/mtdblock5 b 31 5

    sudo mknod dev/mtdblock6 b 31 6

    sudo mknod dev/mtdblock7 b 31 7

    sudo mknod dev/mtdblock8 b 31 8

    sudo mknod dev/mtdblock9 b 31 9




     Var 目录下创建符号链接文件

    ln -s /tmp var/lock

    ln -s /tmp var/log

    ln -s /tmp var/run

    ln -s /tmp var/tmp




    拷贝交叉编译器中的动态库到相应的目录下


    这一步有坑,如果你之前的交叉编译器有问题那么有些库会缺少,注意路径

    cp -af /opt/buildroot-2012.08/arm920t/usr/arm-linux/sysroot/lib/*so*  lib/

    cp -af /opt/buildroot-2012.08/arm920t/usr/arm-linux/lib/*so* lib/   



     在etc/创建inittab文件

    cd etc

    vim inittab


    # /etc/inittab                                                                                                                     

    #


    #

    # Note: BusyBox init doesn't support runlevels.  The runlevels field is

    # completely ignored by BusyBox init. If you want runlevels, use sysvinit.

    #

    # Format for each entry: <id>:<runlevels>:<action>:<process>

    #

    # id        == tty to run on, or empty for /dev/console.

    #              If specified, then /dev/$id device must exist

    # runlevels == ignored, busybox doesn't support it

    # action    == one of sysinit, respawn, askfirst, wait, and once

    # process   == program to run

     

    # Startup the system

    # mount all the file systems specified in /etc/fstab

    ::sysinit:/bin/mount -a

     

    #Use mdev as hotplug to auto mount USB storage or SD card

    ::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug

     

    #Use mdev to auto generate the device node in /dev path

    ::sysinit:/sbin/mdev -s

     

    #make shm, pts support

    ::sysinit:/bin/mkdir -p /dev/pts

    ::sysinit:/bin/mkdir -p /dev/shm

    ::sysinit:/bin/mount -t devpts devpts /dev/pts

     

    #Mount our apps/info partition

    null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock6 /apps

    null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock7 /info

     

    #Set hostname

    null::sysinit:/bin/hostname -F /etc/hostname

     

    #Enable console logon

    null::respawn:/sbin/getty -L ttyS0 115200 vt100

     

    # now run any rc scripts

    null::wait:/etc/init.d/rcS

     

    # system daemon

    null::respawn:/sbin/syslogd -n

    null::respawn:/sbin/klogd -n

     

    # Stuff to do before rebooting

    null::shutdown:/bin/umount /apps

    null::shutdown:/bin/umount /info

    null::shutdown:/bin/killall klogd

    null::shutdown:/bin/killall syslogd

    null::shutdown:/bin/umount -a -r

    #null::shutdown:/sbin/swapoff -a


    etc/创建/etc/init.d/rcS脚本


    vim init.d/rcS  

    #!/bin/sh

     


    # Start all init scripts in /etc/init.d

    # executing them in numerical order.

    #                           

     

    for i in /etc/init.d/S??* ; do

                $i

    done

    etc/ 配置网卡的启动脚本

    vim init.d/S01_network 

    #!/bin/sh

    ifconfig eth0 192.168.1.111 netmask 255.255.255.0 up


     etc/创建支持/apps/etc目录下的启动脚本

     vim init.d/S99_rcsApp 

    #!/bin/sh

     


    #

    # Start all init scripts in /apps/etc/init.d

    # executing them in numerical order.

    #

    if (test -d /apps/etc/init.d)

        then

        for i in /apps/etc/init.d/S??* ; do

        $i

        done

    fi


    etc/修改init.d目录下的文件权限

     chmod 777 init.d/*


    etc/创建fstab文件

     vim fstab 

    #<File system> <mount pt>     <type>   <options>         <dump> <pass>

    #devpts          /dev/pts       devpts   defaults          0      0

    #/dev/root       /              ext2     rw,noauto         0      1

    proc            /proc          proc     defaults          0      0

    tmpfs           /tmp          tmpfs    defaults          0      0

    tmpfs           /dev          tmpfs    defaults          0      0

    sysfs           /sys           sysfs    defaults          0      0


    etc/创建hostname,hosts,TZ文件

     echo "root" > hostname

     echo "127.0.0.1      localhost" >> hosts

     echo "MST7MDT" >> TZ

    echo "Copyright (C) 2017fanmaolin" >> issue


     etc/创建profile文件

    cofile file for the Bourne shells.

     

    export PATH=\

    /bin:\

    /sbin:\

    /usr/bin:\

    /usr/sbin:\

    /usr/local/bin:\

    /apps/bin:\

    /apps/tools:\

    /apps/tslib/bin\

     

    # If running interactively, then:

    if [ "$PS1" ]; then

     

        if [ "$BASH" ]; then

            export PS1="[\u@\h \W]\\$ "

            alias ll='/bin/ls --color=tty -laFh'

            alias ls='/bin/ls --color=tty -F'

            export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;

    32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=0

    1;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.png=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35

    :*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.d

    l=01;35:*.xcf=01;35:*.xwd=01;35:';

        else

          if [ "`id -u`" -eq 0 ]; then

            export PS1='>: '

          else

            export PS1='>: '

          fi

        fi

    # System Setting

        set -o vi

        alias  ll='ls -l'

        export USER=`id -un`

        export LOGNAME=$USER

        export HOSTNAME=`/bin/hostname`

        export HISTSIZE=1000

        export HISTFILESIZE=1000

        export PAGER='/bin/more '

        export EDITOR='/bin/vi'

        export INPUTRC=/etc/inputrc

        export DMALLOC_OPTIONS=debug=0x34f47d83,inter=100,log=logfile

        export VAR1=

        export VAR2=

        export VAR3=

        export VAR4=

        export VAR5=

        export LD_LIBRARY_PATH=/lib:/usr/lib/

    # QT Extendded 4.4.3 Setting

        export QTDIR=/apps/qt-extended-4.4.3

        export QWS_MOUSE_PROTO='TSLIB:/dev/event0'

        export QWS_DISPLAY='LinuxFB:/dev/fb0'

        export QWS_DISPLAY='LinuxFB:mmWidth240:mmHeight320:0'

        export QWS_SIZE='240x320'

        export QT_PLUGIN_PATH=$QTDIR/plugins/

        export QT_QWS_FONTDIR=$QTDIR/lib/fonts

        export PATH=$QTDIR/bin:$PATH

        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib

    # Touch Scree tslib Setting

        export TSLIB_ROOT=/apps/tslib

        export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

        export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal

        export TSLIB_TSDEVICE=/dev/event0

        export TSLIB_CONSOLEDEVICE=none

        export TSLIB_FBDEVICE=/dev/fb0

    fi;


     etc/创建指定一些协议所使用的端口号文件protocols

    vim protocols 

    # /etc/protocols:

    # $Id: protocols,v 1.1.1.1 2001/09/12 19:03:24 andersee Exp $

    #

    # Internet (IP) protocols

    #

    #       from: @(#)protocols     5.1 (Berkeley) 4/17/89

    #

    # Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).

     

    ip      0       IP              # internet protocol, pseudo protocol number

    icmp    1       ICMP            # internet control message protocol

    igmp    2       IGMP            # Internet Group Management

    ggp     3       GGP             # gateway-gateway protocol

    ipencap 4       IP-ENCAP        # IP encapsulated in IP (officially ``IP'')

    st      5       ST              # ST datagram mode

    tcp     6       TCP             # transmission control protocol

    egp     8       EGP             # exterior gateway protocol

    pup     12      PUP             # PARC universal packet protocol

    udp     17      UDP             # user datagram protocol

    hmp     20      HMP             # host monitoring protocol

    xns-idp 22      XNS-IDP         # Xerox NS IDP

    rdp     27      RDP             # "reliable datagram" protocol

    iso-tp4 29      ISO-TP4         # ISO Transport Protocol class 4

    xtp     36      XTP             # Xpress Tranfer Protocol

    ddp     37      DDP             # Datagram Delivery Protocol

    idpr-cmtp       39      IDPR-CMTP       # IDPR Control Message Transport

    rspf    73      RSPF            #Radio Shortest Path First.

    vmtp    81      VMTP            # Versatile Message Transport

    ospf    89      OSPFIGP         # Open Shortest Path First IGP

    ipip    94      IPIP            # Yet Another IP encapsulation

    encap   98      ENCAP           # Yet Another IP encapsulation


    etc/创建mdev.conf文件


    mdev会在/etc目录下找mdev的配置文件: mdev.conf. 如果该文件不存在,那么在执行mdev –s这个命令时,

    会提示找不到mdev.conf,这时我们可以建一个空的mdev.conf文件解决这个问题。下面创建使用mdev自动挂载u盘和SD卡的配置/etc/mdev.conf

     

    vim mdev.conf 

    sd[a-z][0-9]      0:0 0777        @(mount /dev/$MDEV /mnt/usb)

    sd[a-z]           0:0 0777        $(umount /mnt/usb)

    ub[a-z][0-9]      0:0 0777        @(mount /dev/$MDEV /mnt/usb)

    ub[a-z]           0:0 0777        $(umount /mnt/usb)

    mmcblk[0-9]p[0-9] 0:0 0777        @(mount /dev/$MDEV /mnt/sdc)

    mmcblk[0-9]       0:0 0777        $(umount /mnt/sdc)


    etc/ 创建用户组group文件

    vim group  

    root:x:0:root



    这里需要注意 :

    groupname:password:gid:members

     

    第一个字段为用户组名称

    第二个字段为用户组密码,当为x时密码是映射到/etc/gshadow中的,是非逆的

    第三个字段为GID,及组号,为正整数或0,0被付于了root用户组;系统通常会预留一些较靠前的GID给系统虚拟用户之用,每个系统预留的GID都不同,Fedora预留了500个,所以我们添加新用户组时是从500开始的。GID的范围由/etc/login.defs中的GID_MIN和GID_MAX决定

    第四个字段为用户列表,每个用户间用逗号分隔

     

    这里的password代表组口令,很少用到。它可使原先不在这个群组中的用户可以通过newgrp命令暂时继承该组的权限,使用 newgrp命令时会新开一个shell。口令的加密方式和passwd文件中的口令一样,所以如果需设置组口令,要用passwd程序虚设一个用户,再把该用户password节中的加密口令拷贝到/etc/group文件中。members列代表组成员,我们可把需加入该组的用户以逗号分隔添加到这里即可。同一组的成员可继承该组所拥有的权限。


    etc/创建用户passwd文件

    vim passwd 

    root:x:0:0:root:/:/bin/sh


    username:password:uid:gid:gecos:homedir:shell

     这里需要注意 :

    第一个字段为登录名

    第二个字段为口令,一般被映射到shadow文件中

    第三个字段为UID

    第四个字段为GID

    第五个字段为用户名全称,gecos是通用电子计算机操作系统的缩写,是Bell实验室中的一台大型主机。

    第六个字段为用户根目录

    第七个字段为用户所用SHELL的类型

     

    Unix系统最初是用明文保存密码的,后来由于安全的考虑,采用crypt()算法加密密码并存放在/etc/passwd文件。现在,由于计算机处理能力的提高,使密码破解变得越来越容易。/etc/passwd文件是所有合法用户都可访问的,大家都可互相看到密码的加密字符串,这给系统带来很大的安全威胁。现代的Unix系统使用影子密码系统,它把密码从/etc/pa sswd文件中分离出来,真正的密码保存在/etc/shadow文件中,shadow文件只能由超级用户访问。这样入侵者就不能获得加密密码串,用于破解。使用shadow密码文件后,/etc/passwd文件中所有帐户的password域的内容为"x",如果password域的内容为"*",则该帐号被停用。使用passwd这个程序可修改用户的密。

     

    etc/创建密码映射shadow文件

    vim shadow 

    root::0:0:99999:7:::

    (设置密码为0)

    username:password:last_change:min_change:max_change:warm:failed_expire:expiration:reserved

     

    第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;

    第二字段:密码(已被加密),这个字段是非空的;

    第三字段:上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;

    第四字段:两次修改口令间隔最少的天数;如果这个字段的值为空,帐号永久可用;

     

    第五字段:两次修改口令间隔最多的天数;如果这个字段的值为空,帐号永久可用;

     

    第六字段:提前多少天警告用户口令将过期;如果这个字段的值为空,帐号永久可用;

     

    第七字段:在口令过期之后多少天禁用此用户;如果这个字段的值为空,帐号永久可用;

     

    第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;

    第九字段:保留字段,目前为空,以备将来发展之用;


    在文件系统中安装busybox

    sudo tar xjf ~/fanmaolin/systools/busybox-1.20.2.tar.bz2

    cd busybox-1.20.2/

    vim Makefile

    #修改CROSS_COMPILER为:

    CROSS_COMPILE ?= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-

    (交叉编译器)

    sudo make menuconfig

    #选择:

      Busybox Settings  --->

           General Configuration  --->

                 [*] Don't use /usr

           Installation Options ("make install" behavior)  --->

                 What kind of applet links to install (as soft-links)  --->

                 (/home/fanmaolin/fl2440/roofts/roofts) BusyBox installation prefix(注意路径

    sudo make

    sudo make install

    ....

      /home/fanmaolin/fl2440/roofts/roofts/sbin/udhcpc -> ../bin/busybox

     /home/fanmaolin/fl2440/roofts/roofts/sbin/udhcpd -> ../bin/busybox

    /home/fanmaolin/fl2440/roofts/roofts/sbin/vconfig -> ../bin/busybox

    /home/fanmaolin/fl2440/roofts/roofts/sbin/zcip -> ../bin/busybox


    生成linuxrc 


    编译生成PC版的 dropbear

    下载:

    wget http://matt.ucc.asn.au/dropbear/releases/dropbear-0.53.1.tar.bz2

    tar -xjf dropbear-0.53.1.tar.bz2 

    cd dropbear-0.53.1

    ./configure && make


     生成的文件:

        dropbear: ssh2 server

        dropbearkey: 密钥生成器

        dropbearconvert: 可以转换openssh的密钥

        dbclient: ssh2 client 


     ./dropbearkey -t rsa -f /home/fanmaolin/fl2440/roofts/roofts/etc/dropbear/dropbear_rsa_host_key

    ./dropbearkey -t dss -f /home/fanmaolin/fl2440/roofts/roofts/etc/dropbear/dropbear_dss_host_key

    chmod 666/home/fanmaolin/fl2440/roofts/roofts/etc/dropbear/dropbear_*


    编译ARM版本的dropbear

    make distclean

    ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --build=i686 --host=arm-linux --disable-zlib

    make

    mv dbclient ssh

    arm-linux-strip dropbear

    arm-linux-strip ssh

    cp dropbear ssh /home/fanmaolin/fl2440/roofts/roofts/usr/sbin/

    roofts/在文件系统中创建启动脚本

    vim etc/init.d/S04_dropbear

    #!/bin/sh

    /usr/sbin/dropbear


    chmod 777 etc/init.d/S04_dropbear 


    到此完成了根文件系统树的制作。接下来制作简单的initramfs。



    问题总结


    无法显示Linuxrc,并且在busybox里无法进行删除操作

    删除操作:ctrl+Backspace

    路径有错误:

    绝对路径:cd /home/fanmaolin/fl2440/roofts/roofts
    相对路径:cd ../../home/fanmaolin/fl2440/roofts/roofts/


    dropbear无法创建文件,没有换成自己的路径

    错误:./dropbearkey -t rsa -f /opt/rootfs/etc/dropbear/dropbear_rsa_host_key
     正确:./dropbearkey -t rsa -f /home/fanmaolin/fl2440/roofts/roofts/etc/dropbear/
    下面的路径都需要更改


    展开全文
  • java 制作签名版电子合同

    千次阅读 2020-04-07 16:57:26
    Java 制作带签名的电子合同 根据项目需求,需要生成一个带电子签名的合同,即客户在手机进行签名后,将签名图片合成到合同中。 目前方案有两个,使用docx4j插件根据书签生成word版电子合同 或者 使用itext插件根据...

    Java 制作带签名的电子合同

    根据项目需求,需要生成一个带电子签名的合同,即客户在手机进行签名后,将签名图片合成到合同中。

    目前方案有两个,使用docx4j插件根据书签生成word版电子合同 或者 使用itext插件根据PDF模版生成PDF版电子合同。

    方案一:使用docx4j生成word电子合同

    本文参考文章来自:https://www.cnblogs.com/qlqwjy/p/9866484.html

    1.引入docx4j

    本案例使用maven仓库引入jar包

    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j</artifactId>
        <version>6.1.2</version>
    </dependency>

    2.docx4j配置

    可以不添加配置文件,但debug日志会提示找不到docx4j配置文件

    在src下创建docx4j.properties配置文件,maven项目请放在resources文件夹下

    # Page size: use a value from org.docx4j.model.structure.PageSizePaper enum
    # eg A4, LETTER
    docx4j.PageSize=LETTER
    # Page size: use a value from org.docx4j.model.structure.MarginsWellKnown enum
    docx4j.PageMargins=NORMAL
    docx4j.PageOrientationLandscape=false
    # Page size: use a value from org.pptx4j.model.SlideSizesWellKnown enum
    # eg A4, LETTER
    pptx4j.PageSize=LETTER
    pptx4j.PageOrientationLandscape=false
    # These will be injected into docProps/app.xml
    # if App.Write=true
    docx4j.App.write=true
    docx4j.Application=docx4j
    docx4j.AppVersion=6.1.2
    # of the form XX.YYYY where X and Y represent numerical values
    # These will be injected into docProps/core.xml
    docx4j.dc.write=true
    docx4j.dc.creator.value=docx4j
    docx4j.dc.lastModifiedBy.value=docx4j
    #
    #docx4j.McPreprocessor=true
    # If you haven't configured log4j yourself
    # docx4j will autoconfigure it. Set this to true to disable that
    docx4j.Log4j.Configurator.disabled=false

    3.构建WordProcessingMlPackage对象

    docx格式文档可以理解为一个压缩包,若将其解压可看到一个类似前端的工程项目,其中document.xml用于全文的配置,详细解说请自行查阅资料

    WordprocessingMLPackage是操作word文档包对象;


    创建新的word文档

    import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
    
    /**
     * 构建新word文件
     */
    public static WordprocessingMLPackage build() throws Exception{
        return WordprocessingMLPackage.createPackage();
    }

    加载存在的word文档

    import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
    
    /**
     * 读取存在的word文件
     * @param wordFilePath word文件路径
     */
    public static WordprocessingMLPackage load(String wordFilePath) throws Exception{
        return WordprocessingMLPackage.load(new File(wordFilePath));
    }

    4.获取书签

    书签:CTBookmark对象

    import org.docx4j.TraversalUtil;
    import org.docx4j.dml.wordprocessingDrawing.Inline;
    import org.docx4j.finders.RangeFinder;
    import org.docx4j.jaxb.Context;
    import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
    import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
    import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
    import org.docx4j.org.apache.poi.util.IOUtils;
    import org.docx4j.wml.*;
    
    public static void main(String[] args) throws Exception {
        String wordFilePath = "";
        WordprocessingMLPackage wordMLPackage = load(wordFilePath);
    
        // 提取正文
        MainDocumentPart main = wordMLPackage.getMainDocumentPart();
        Document doc = main.getContents();
        Body body = doc.getBody();
    
        // 获取段落
        List<Object> paragraphs  = body.getContent();
    
        // 提取书签并获取书签的游标
        RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange");
        new TraversalUtil(paragraphs, rt);
    
    
        // 遍历书签
        for (CTBookmark bm : rt.getStarts()) {
            System.out.println("name:"+bm.getName());
        }
    }

    5.在书签位置加入图片

    import org.docx4j.TraversalUtil;
    import org.docx4j.dml.wordprocessingDrawing.Inline;
    import org.docx4j.finders.RangeFinder;
    import org.docx4j.jaxb.Context;
    import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
    import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
    import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
    import org.docx4j.org.apache.poi.util.IOUtils;
    import org.docx4j.wml.*;
    
    public static void addImage(WordprocessingMLPackage wPackage,CTBookmark bm) throws Exception{
        P p = (P) (bm.getParent());
        ObjectFactory factory = Context.getWmlObjectFactory();
        R run = factory.createR();
    
        // 读入图片并转化为字节数组,因为docx4j只能字节数组的方式插入图片
        // byte[] bytes = IOUtils.toByteArray(new FileInputStream("图片路径"));
        byte[] bytes = getFileBytes("图片路径");
        // 开始创建一个行内图片
        BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wPackage, bytes);
        // 最后一个是限制图片的宽度,缩放的依据
        Inline inline = imagePart.createImageInline(null, null, 0, 1, false, 0);
        // 构建绘图
        Drawing drawing = factory.createDrawing();
        // 加入图片段落
        drawing.getAnchorOrInline().add(inline);
        run.getContent().add(drawing);
        // 清理书签所在数据
        // p.getContent().clear();
        // 加入图片信息
        p.getContent().add(run);
    
    }
    
    public static byte[] getFileBytes(String filePath) throws Exception{
        File file = new File(filePath);
        if(!file.exists()){
            throw new Exception("文件不存在!");
        }
    
        byte[] data = null;
        try(FileInputStream fis = new FileInputStream(file);ByteArrayOutputStream baos = new ByteArrayOutputStream()){
            int len;
            byte[] buffer = new byte[1024];
            while ((len = fis.read(buffer)) != -1) {
                baos.write(buffer, 0, len);
            }
            data = baos.toByteArray();
        }
        return data;
    }

    6.保存文件

    必须调用保存,否则更改无效

    // 保存有两种方式
    // 方式一
    wordMLPackage.save(new File(wordFilePath));
    
    // 方式二
    Docx4J.save(wordMLPackage, new File(wordFilePath));

    7.完整代码

    
    import org.docx4j.TraversalUtil;
    import org.docx4j.dml.wordprocessingDrawing.Inline;
    import org.docx4j.finders.RangeFinder;
    import org.docx4j.jaxb.Context;
    import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
    import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
    import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
    import org.docx4j.org.apache.poi.util.IOUtils;
    import org.docx4j.wml.*;
    
    import javax.xml.bind.JAXBElement;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class WordTest {
        public static void main(String[] args) throws Exception {
            String wordFilePath = "word文档路径";
            WordprocessingMLPackage wordMLPackage = load(wordFilePath);
    
            // 提取正文
            MainDocumentPart main = wordMLPackage.getMainDocumentPart();
            Document doc = main.getContents();
            Body body = doc.getBody();
    
            // 获取段落
            List<Object> paragraphs  = body.getContent();
    
            // 提取书签并获取书签的游标
            RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange");
            new TraversalUtil(paragraphs, rt);
    
            // 遍历书签
            for (CTBookmark bm : rt.getStarts()) {
                System.out.println("name:"+bm.getName());
                // 替换image
                if ("sign".equals(bm.getName())){
                    addImage(wordMLPackage, bm);
                    break;
                }
            }
    
            save(wordMLPackage,wordFilePath);
        }
    
        public static void addImage(WordprocessingMLPackage wPackage,CTBookmark bm) throws Exception{
            P p = (P) (bm.getParent());
            ObjectFactory factory = Context.getWmlObjectFactory();
            R run = factory.createR();
    
            // 读入图片并转化为字节数组,因为docx4j只能字节数组的方式插入图片
            // byte[] bytes = IOUtils.toByteArray(new FileInputStream("图片文件路径"));
            byte[] bytes = getFileBytes("图片文件路径");
            // 开始创建一个行内图片
            BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wPackage, bytes);
            // 最后一个是限制图片的宽度,缩放的依据
            Inline inline = imagePart.createImageInline(null, null, 0, 1, false, 0);
            // 构建绘图
            Drawing drawing = factory.createDrawing();
            // 加入图片段落
            drawing.getAnchorOrInline().add(inline);
            run.getContent().add(drawing);
            // 清理书签所在数据
            // p.getContent().clear();
            // 加入图片信息
            p.getContent().add(run);
        }
    
        /**
         * 构建文件
         */
        public static WordprocessingMLPackage build() throws Exception{
            return WordprocessingMLPackage.createPackage();
        }
    
        /**
         * 读取存在的word文件
         * @param wordFilePath word文件路径
         */
        public static WordprocessingMLPackage load(String wordFilePath) throws Exception{
            return WordprocessingMLPackage.load(new File(wordFilePath));
        }
    
        /**
         * 保存
         * @param wordMLPackage word
         */
        public static void save(WordprocessingMLPackage wordMLPackage,String wordFilePath) throws Exception{
            wordMLPackage.save(new File(wordFilePath));
        }
    
        public static byte[] getFileBytes(String filePath) throws Exception{
            File file = new File(filePath);
            if(!file.exists()){
                throw new Exception("文件不存在!");
            }
    
            byte[] data = null;
            try(FileInputStream fis = new FileInputStream(file);ByteArrayOutputStream baos = new ByteArrayOutputStream()){
                int len;
                byte[] buffer = new byte[1024];
                while ((len = fis.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                data = baos.toByteArray();
            }
            return data;
        }
    }
    

    8.效果图

    加入标签

    使用docx4j在标签位置加入图片

    方案二:使用itext生成PDF电子合同

    1.引入itext

    <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.11</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext-asian</artifactId>
        <version>5.2.0</version>
    </dependency>

    2.设置表单数据&图片

    import com.itextpdf.text.Image;
    import com.itextpdf.text.Rectangle;
    import com.itextpdf.text.pdf.*;
    
    import java.io.ByteArrayOutputStream;
    import java.io.FileOutputStream;
    import java.util.HashMap;
    
    public class PDFTest {
        public static void main(String[] args) throws Exception {
    
            // 模版文件
            String templateFilePath = "模版文件路径";
            // 保存PDF文件
            String pdfFilePath = "保存PDF文件路径";
            // 表单数据
            HashMap<String,String> data = new HashMap<>();
            data.put("amount","100000");
            data.put("month","24");
            data.put("begin_date","2020年4月7日");
            data.put("end_date","2022年4月6日");
            // 图片数据
            HashMap<String,String> imageData = new HashMap<>();
            imageData.put("sign","签名图片");
    
            // 根据PDF模版生成PDF文件
            createPDF(templateFilePath,data,imageData,true,pdfFilePath);
        }
    
        /**
         * 根据PDF模版生成PDF文件
         * @param templateFilePath PDF模版文件路径
         * @param data 表单数据
         * @param imageData 图片数据 VALUE为图片文件路径
         * @param formFlattening false:生成后的PDF文件表单域仍然可编辑 true:生成后的PDF文件表单域不可编辑
         * @param pdfFilePath 生成PDF的文件路径
         */
        private static void createPDF(String templateFilePath, HashMap<String,String> data, HashMap<String,String> imageData,
                                      boolean formFlattening, String pdfFilePath) throws Exception{
            PdfReader reader = null;
            ByteArrayOutputStream bos = null;
            PdfStamper pdfStamper = null;
            FileOutputStream fos = null;
            try{
                // 读取PDF模版文件
                reader = new PdfReader(templateFilePath);
                // 输出流
                bos = new ByteArrayOutputStream();
                // 构建PDF对象
                pdfStamper = new PdfStamper(reader, bos);
    
                // 获取表单数据
                AcroFields form = pdfStamper.getAcroFields();
    
                // 使用中文字体 使用 AcroFields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体 Adobe 宋体 std L
                BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                form.addSubstitutionFont(bfChinese);
    
                // 表单赋值
                for(String key : data.keySet()){
                    form.setField(key,data.get(key));
                    // 也可以指定字体
                    form.setFieldProperty(key, "textfont", bfChinese, null);
                }
    
                // 添加图片
                if(null != imageData && imageData.size() > 0){
                    for(String key : imageData.keySet()){
                        int pageNo = form.getFieldPositions(key).get(0).page;
                        Rectangle signRect = form.getFieldPositions(key).get(0).position;
                        float x = signRect.getLeft();
                        float y = signRect.getBottom();
                        // 读图片
                        Image image = Image.getInstance(imageData.get(key));
                        // 获取操作的页面
                        PdfContentByte under = pdfStamper.getOverContent(pageNo);
                        // 根据域的大小缩放图片
                        image.scaleToFit(signRect.getWidth(), signRect.getHeight());
                        // 添加图片
                        image.setAbsolutePosition(x, y);
                        under.addImage(image);
                    }
                }
    
                // 如果为false那么生成的PDF文件还能编辑,一定要设为true
                pdfStamper.setFormFlattening(formFlattening);
                pdfStamper.close();
    
                // 保存文件
                fos = new FileOutputStream(pdfFilePath);
                fos.write(bos.toByteArray());
                fos.flush();
            }finally {
                if(null != fos){
                    try {fos.close(); }catch (Exception e){e.printStackTrace();}
                }
    
                if(null != bos){
                    try {bos.close(); }catch (Exception e){e.printStackTrace();}
                }
    
                if(null != reader){
                    try {reader.close(); }catch (Exception e){e.printStackTrace();}
                }
            }
        }
    }
    

    3.签名效果

    PDF模版文件

    生成PDF文件

    总结

    itext比docx使用方式更友好,通过PDF模版可以设置表单字体以及样式;

    docx好处在于不需要依赖第三方PDF编辑器,只需要使用word自带的书签功能,辅助程序定位

    两者原理均一样,需要约定KEY名称,便于程序定位填充数据

    异常定位

    itext报:javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V

    这个错误由引入了jaxen、xom、xstream引起的xml工厂多个实现导致,删除引入即可

     

    展开全文
  • 制作文件系统树

    千次阅读 2013-04-10 21:04:13
    因为内核挂载完文件系统后,init进程需要用到/dev/console和/dev/null这两个设备文件来调用mdev构建dev,所以必须在制作文件系统时静态创建这两个设备文件,否则在系统启动时将提示Waring:unable to open an ...
  • 制作自己的具有透明化背景的电子版签名  本文教你如何将自己的手写体转换为具有透明化背景的电子版,需要工具: matlab。  先给出效果图: 图1 电脑前置摄像头拍摄的手写体照片 图2 matlab二值化处理后的...
  • 制作CHM帮助文件

    千次阅读 2006-12-22 10:26:00
    跟我学习制作CHM帮助文件(首发电脑报)时间:2001年02月11日 14:23 来源:王寒晖 原创-IT从Windows 3.X 到Windows 95,系统使用的帮助文件一直都是.hlp格式,在安装Windows 98以后,我们可以发现系统中增加了一种...
  • 名编辑电子杂志大师是一款非常强悍的翻页电子杂志制作软件,不但能够生成适合PC端的EXE、html翻页电子杂志,同时还能生成兼容移动设备浏览的在线电子杂志手机。 名编辑电子杂志大师输出的手机是基于HTML5技术,...
  • 如何制作CHM帮助文件

    千次阅读 2010-07-13 16:02:00
    用微软的HTML Help Workshop工具制作CHM帮助文件 从Windows 3.X到Windows 95,Windows使用的帮助文件一直都是hlp格式。在Windows 98以后,增加了一种基于HTML文件特征的chm帮助文件,Windows 98称之为...
  • 如何制作rpm文件

    千次阅读 2007-04-30 09:29:00
    如何制作rpm文件 内容:一 、rpm 介绍二.典型spec文件分析杨爱林Linux 研发工程师2005 年 7 月 本文分为两部分,第一部分阐述了 rpm 工具的功能以及 rpmbuild 工具,详细的介绍了 spec文件的书写规则以及关键...
  • 如何制作rpm文件

    千次阅读 2006-09-08 16:44:00
    如何制作rpm文件 内容:一 、rpm 介绍二.典型spec文件分析杨爱林Linux 研发工程师2005 年 7 月 本文分为两部分,第一部分阐述了 rpm 工具的功能以及 rpmbuild 工具,详细的介绍了 spec文件的书写规则以及关键部分...
  • CHM帮助文件制作

    千次阅读 2008-07-29 13:50:00
    CHM文件制作 HTML Help Workshop CHM帮助文件是什么?原来的软件大多数采用扩展名为HLP的帮助文件(WinHelp ),但随着互联网的发展,这种格式的帮助文件已经难以适应软件在线帮助的需要,以及更加人性化更加简单...
  • deb包制作中control文件说明

    万次阅读 2013-07-04 09:06:44
    deb包制作中control文件说明 一、制作deb包的方法 使用dpkg方法创建Ubuntu deb包dpkg是最基本的制作deb包的方法,基本步骤如下: 1、$ tar xvjf fceu-0.98.12.src.tar.bz2 // 解包  2、$ mv fceu ...
  • 用C#制作PDF文件全攻略

    千次阅读 2016-01-05 09:26:00
    PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段“暴力”破解的方法,代码片断如下: ...
  • 投标文件制作实战篇

    2008-09-05 11:55:53
    目前大多数监控项目(工程)都采用招标的方式进行,以示公正,招标可以简单的分为公开招标和议标(邀标...是对投标文件的要求是否完整和详细,一般议标的情况对投标文件的要求较低,公开招标的情况对投标文件都有严...
  • java给pdf文件电子签章

    千次阅读 热门讨论 2018-07-19 21:03:09
    电子签章,与我们所使用的数字证书一样,是用来做为身份验证的一种手段,泛指所有以电子形式存在,依附在电子文件并与其逻辑关联,可用以辨识电子文件签署者身份,保证文件的完整性,并表示签署者同意电子文件所陈述...
  • 电子杂志的翻页声音与背景音乐的设置在文件夹管理处选择编辑杂志。 在设置下的常用设置选择声音: 声音按钮:允许/禁用声音按钮。禁用时不自动播放背景音乐,没有翻书声音 声音文件:在此处上传文件(仅支持mp3...
  • 从Windows 3.X到Windows 95,Windows使用的帮助文件一直都是hlp格式。在Windows 98以后,增加了一种基于HTML文件特征的chm帮助文件,Windows 98称之为Compiled HTML Help File。chm帮助文件是一个统一的窗口,左侧是...
  • 使用Busybox制作文件系统

    千次阅读 2014-12-20 16:46:41
    3.6.4 使用Busybox制作文件系统 1、BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如grep、...
  • 企业的文控中心发放文件的时候一般需要盖受控章,表示文件版本和发放数量受到了控制. 传统操作方式:人工盖章+手工记录 本问先解决人工盖章问题 需要使用的python模块PyPDF2, reportlab 需要建文件夹: pic_source...
  • 每一类电子证照都具有相同板式,不同的电子证照之间只是文字、...这样就大大节省了工作量,降低了电子证照制作生成的成本。 软件试用下载 软件设计思路  Ofd文档主要包含三类元素:文字、图片、曲线。设计软件...
  • 怎么制作电子相册视频?有什么快速又简单的方法能做出好看的电子相册视频? 今天就请大神教大家快速制作一个精美的高清电子相册视频。 制作电子相册视频的技巧如下: 这是之前做的电子相册视频的效果截图~ 1.选择...
  • 用微软的HTML Help Workshop工具制作CHM帮助文件   用微软的HTML Help Workshop工具制作CHM帮助文件 从Windows 3.X到Windows 95,Windows使用的帮助文件一直都是hlp格式。在Windows 98以后,增加了一种...
  • 该软件为中国联通电子投标,用于标书制作,生成电子标书
  • 【原创】用Htmlhelp Workshop制作Windows 帮助文件的方法  2011-08-16 15:17:23| 分类: 科技 | 标签:htmlhelp workshop 帮助文件 制作 方法  |字号 订阅  对于经常开发应用软件的人来说...
  • Python编程:制作电子相册

    万次阅读 2016-07-31 20:33:56
    Python编程:制作电子相册本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境:主机:WIN10python版本:3.5开发环境:pyCharm 5.0.2说明:家里有不用的windows平板me400c,用python编写一个脚本,实现...
  • 制作HTML help文件(转载)

    千次阅读 2006-01-09 14:43:00
    从Windows 3.X到Windows 95,Windows使用的帮助文件一直都是hlp格式。在Windows 98以后,增加了一种基于HTML文件特征的chm帮助文件,Windows 98称之为Compiled HTML Help File。chm帮助文件是一个统一的窗口,左侧是...
  • 用PS制作电子签名方法总结

    千次阅读 2020-06-15 19:05:59
    PS制作电子签名的方法。
  • [iOS]PKPass文件制作及添加到Wallet

    千次阅读 2017-03-07 14:12:23
    包含:图标icon、缩略图thumbnail和logo外最重要的就是pass.json、manifest.json和signature等文件的一个压缩包2、如何制作PKPass文件?1)、服务器端制作是比较通用的做法 这里有一个Java写的开源库: Java版本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,039
精华内容 16,015
关键字:

怎样制作电子版文件