标签: kernel

  • Script to Build Android Kernel Under Ubuntu

    #!/bin/bash
    #
    ANDROID=”android-4.1.1_r6.1″
    GCC=4.4.3

    KERNEL=goldfish
    KCONFIG=goldfish_armv7_defconfig

    #GIT_SERVER=aosp.zhenglei.net
    GIT_SERVER=127.0.0.1
    GIT_PATH=”git/aosp”

    PREBUILT=prebuilt
    HOST=”linux-x86″
    ARCH=”arm”
    BUILD_PATH=”build”

    function get_Tool {
    LOC=”$1″
    TAG=”$2″
    VER=”$3″
    TOOL_CHAIN=${ARCH}-eabi-${GCC}

    if [ ! -d ${LOC}/${TOOL_CHAIN} ];then
    if [ ! -d ${PREBUILT}/${TOOL_PATH} ];then
    if [ -d ${PREBUILT} ];then
    rm -rf ${PREBUILT}
    fi
    git clone git://${GIT_SERVER}/${GIT_PATH}/platform/prebuilt
    fi

    cd ${PREBUILT}
    CUR_BRANCH=`git branch|grep “^* “|sed “s/^* //”`
    if [ “${CUR_BRANCH}” != “${TAG}” ];then
    #    git tag -l
    git checkout -b ${TAG}
    fi
    cd ..

    cp -r ${PREBUILT}/${HOST}/toolchain/${TOOL_CHAIN} ${LOC}

    fi
    TOOL_PATH=”`pwd`/${LOC}/${TOOL_CHAIN}”
    }

    function get_Kernel {
    kernel=”$1″
    if [ ! -d ${kernel} ];then
    git clone git://${GIT_SERVER}/${GIT_PATH}/kernel/${kernel}.git
    fi

    cd ${kernel}
    # git branch -a
    CUR_BRANCH=`git branch|grep “^* “|sed “s/^* //”`
    if [ “${CUR_BRANCH}” != “${kernel}” ];then
    git checkout -t remotes/origin/android-${kernel}-2.6.29 -b ${kernel}
    fi
    if [ ! -d ../${BUILD_PATH}/${kernel} ];then
    mkdir ../${BUILD_PATH}/${kernel}
    git archive –format tar HEAD|tar x -C ../${BUILD_PATH}/${kernel}/
    fi
    cd ..
    }

    function build_Kernel {
    config=$1
    cd ${BUILD_PATH}/${kernel}
    #ls -l arch/${ARCH}/configs/
    make ${config}

    START=`date +%s`
    echo “Start to build at time:  $START”
    echo “################################”
    echo
    echo

    make -j4

    echo
    echo
    echo “################################”
    FINISH=`date +%s`
    echo “Finish build at time: $FINISH”
    echo
    ELAPSED=`expr $FINISH – $START`
    echo “Elapsed time: $ELAPSED”
    cd ..
    cd ..
    }

    ##### Main ######
    if [ ! -d ${BUILD_PATH} ];then
    mkdir ${BUILD_PATH}
    fi

    rm -rf ${BUILD_PATH}/*

    get_Tool $BUILD_PATH $ANDROID $GCC

    export ARCH=arm
    export SUBARCH=arm
    export CROSS_COMPILE=arm-eabi-
    export PATH=${TOOL_PATH}/bin:$PATH

    get_Kernel $KERNEL

    build_Kernel $KCONFIG

    # Output

    cp ${BUILD_PATH}/${KERNEL}/arch/${ARCH}/boot/zImage ${BUILD_PATH}/${KERNEL}/

    # Luanch emulator with build kernel
    # emulator -kernel ${KERNEL}/zImage

  • Change vlan device name

    Modification:
            Function:  register_vlan_device()
            Location:  net/8021q/vlan.c
     
    static int register_vlan_device(struct net_device *real_dev, u16 vlan_id)
    {
                       ……
                       switch (vn->name_type) {
                       ……
                       case VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD:
    //
    snprintf(name, IFNAMSIZ, "%s.%i", real_dev->name, vlan_id);
    snprintf(name, IFNAMSIZ, "%s%i", "eth", vlan_id);
                                          break;
                       case VLAN_NAME_TYPE_PLUS_VID:
                                          /* Put our vlan.VID in the name.
                                           * Name will look like:    vlan0005
                                           */
                       default:
                                          snprintf(name, IFNAMSIZ, "vlan%.4i", vlan_id);
                       }
                       ……
    }
  • Reserve eth0 slot in Linux Kernel

    Modification:
       Function:      __dev_alloc_name
       Location:      net/core/dev.c
     
    static int __dev_alloc_name(...)
    {
    ……
    for_each_netdev(net, d) {
    ……
    }
    /* Add two lines */ 
    if (!strncmp(name,"eth",3))                    
      set_bit(0, inuse);
    …… 
    }